#!../miniperl
-open (OUT, ">perlmodlib.tmp") or die $!;
-my (@pragma, @mod);
-open (MANIFEST, "../MANIFEST") or die $!;
+use strict;
+use warnings;
+
+$ENV{LC_ALL} = 'C';
+
+use FindBin;
+chdir $FindBin::Bin or die "$0: Can't chdir $FindBin::Bin: $!";
+
+my $Quiet = @ARGV && $ARGV[0] eq '-q';
+
+open (OUT, ">perlmodlib.pod") or die $!;
+my (@pragma, @mod, @files);
-while (<MANIFEST>) {
- my $filename;
- next unless s|^lib/|| or m|^ext/|;
- ($filename) = /(\S+)/;
- $filename =~ s|^[^/]+/|| if $filename =~ s|^ext/||;
- next unless $filename =~ /\.pm$/;
- next unless open (MOD, "../lib/$filename");
- my ($name, $thing);
- my $foundit=0;
- {local $/="";
- while (<MOD>) {
- next unless /^=head1 NAME/;
- $foundit++;
- last;
- }
- }
- next unless $foundit;
- my $title = <MOD>;
- chomp($title);
- close MOD;
-
- my $perlname = $filename;
- $perlname =~ s|\.pm$||;
- $perlname =~ s|/|::|g;
-
- ($name, $thing) = split / - /, $title,2;
- next unless $name and $thing;
- $thing=~s/^perl pragma to //i;
- $thing=ucfirst($thing);
- $title = "=item $perlname\n\n$thing\n\n";
-
- if ($filename=~/[A-Z]/) {
- push @mod, $title;
- } else {
- push @pragma, $title;
- }
+# MANIFEST itself is Unix style filenames, so we have to assume that Unix style
+# filenames will work.
+
+open (MANIFEST, "../MANIFEST") or die $!;
+@files = grep m#(?:\.pm|\.pod|_pm\.PL)#, map {s/\s.*//s; $_}
+ grep { m#^(lib|ext|dist|cpan)/# && !m#/(?:t|demo)/# } <MANIFEST>;
+
+my %exceptions = (
+ 'abbrev' => 'Text::Abbrev',
+ 'carp' => 'Carp',
+ 'getopt' => 'Getopt::Std',
+ 'B<CGI::Carp>' => 'CGI::Carp',
+ 'ModuleInfo' => 'Module::Build::ModuleInfo',
+ '$notes_name' => 'Module::Build::Notes',
+ 'Encode::MIME::NAME' => 'Encode::MIME::Name',
+ 'libnetFAQ' => 'Net::libnetFAQ',
+);
+
+for my $filename (@files) {
+ unless (open MOD, '<', "../$filename") {
+ warn "Couldn't open ../$filename: $!";
+ next;
+ }
+
+ my ($name, $thing);
+ my $foundit = 0;
+ {
+ local $/ = "";
+ while (<MOD>) {
+ next unless /^=head1 NAME/;
+ $foundit++;
+ last;
+ }
+ }
+ unless ($foundit) {
+ warn "$filename missing =head1 NAME (OK if respective .pod exists)\n"
+ unless $Quiet;
+ next;
+ }
+ my $title = <MOD>;
+ chomp $title;
+ close MOD;
+
+ ($name, $thing) = split / --? /, $title, 2;
+
+ unless ($name and $thing) {
+ warn "$filename missing name\n" unless $name;
+ warn "$filename missing thing\n" unless $thing or $Quiet;
+ next;
+ }
+
+ $name =~ s/[^A-Za-z0-9_:\$<>].*//;
+ $name = $exceptions{$name} || $name;
+ $thing =~ s/^perl pragma to //i;
+ $thing = ucfirst $thing;
+ $title = "=item $name\n\n$thing\n\n";
+
+ if ($name =~ /[A-Z]/) {
+ push @mod, $title;
+ } else {
+ push @pragma, $title;
+ }
}
+# Much easier to special case it like this than special case the depending on
+# and parsing lib/Config.pod, or special case opening configpm and finding its
+# =head1 (which is not found with the $/="" above)
+push @mod, <<'CONFIG';
+=item Config
+
+Access Perl configuration information
+
+CONFIG
+
print OUT <<'EOF';
+=for maintainers
+Generated by perlmodlib.PL -- DO NOT EDIT!
+
=head1 NAME
perlmodlib - constructing new Perl modules and finding existing ones
-=head1 DESCRIPTION
-
=head1 THE PERL MODULE LIBRARY
-Many modules are included the Perl distribution. These are described
+Many modules are included in the Perl distribution. These are described
below, and all end in F<.pm>. You may discover compiled library
-file (usually ending in F<.so>) or small pieces of modules to be
+files (usually ending in F<.so>) or small pieces of modules to be
autoloaded (ending in F<.al>); these were automatically generated
by the installation process. You may also discover files in the
library directory that end in either F<.pl> or F<.ph>. These are
manner with respect to namespace pollution because they use the
Exporter module. See their own documentation for details.
+It's possible that not all modules listed below are installed on your
+system. For example, the GDBM_File module will not be installed if you
+don't have the gdbm library.
+
=over 12
EOF
To find out I<all> modules installed on your system, including
those without documentation or outside the standard release,
-just do this:
+just use the following command (under the default win32 shell,
+double quotes should be used instead of single quotes).
- % find `perl -e 'print "@INC"'` -name '*.pm' -print
+ % perl -MFile::Find=find -MFile::Spec::Functions -Tlwe \
+ 'find { wanted => sub { print canonpath $_ if /\.pm\z/ },
+ no_chdir => 1 }, @INC'
+(The -T is here to prevent '.' from being listed in @INC.)
They should all have their own documentation installed and accessible
via your system man(1) command. If you do not have a B<find>
program, you can use the Perl B<find2perl> program instead, which
to fix your manpath. See L<perl> for details. If you have no
system B<man> command, you might try the B<perldoc> program.
+Note also that the command C<perldoc perllocal> gives you a (possibly
+incomplete) list of the modules that have been further installed on
+your system. (The perllocal.pod file is updated by the standard MakeMaker
+install process.)
+
=head2 Extension Modules
Extension modules are written in C (or a mix of Perl and C). They
are usually dynamically loaded into Perl if and when you need them,
-but may also be be linked in statically. Supported extension modules
+but may also be linked in statically. Supported extension modules
include Socket, Fcntl, and POSIX.
Many popular C extension modules do not come bundled (at least, not
for adequate testing and configuration across the multitude of
platforms on which Perl was beta-tested. You are encouraged to
look for them on CPAN (described below), or using web search engines
-like Alta Vista or Deja News.
+like Alta Vista or Google.
=head1 CPAN
replicated trove of Perl materials, including documentation, style
guides, tricks and traps, alternate ports to non-Unix systems and
occasional binary distributions for these. Search engines for
-CPAN can be found at http://cpan.perl.com/ and at
-http://theory.uwinnipeg.ca/mod_perl/cpan-search.pl .
+CPAN can be found at http://www.cpan.org/
Most importantly, CPAN includes around a thousand unbundled modules,
some of which require a C compiler to build. Major categories of
=back
-Registered CPAN sites as of this writing include the following.
-You should try to choose one close to you:
+The list of the registered CPAN sites follows.
+Please note that the sorting order is alphabetical on fields:
-=over
+Continent
+ |
+ |-->Country
+ |
+ |-->[state/province]
+ |
+ |-->ftp
+ |
+ |-->[http]
+
+and thus the North American servers happen to be listed between the
+European and the South American sites.
+
+Registered CPAN sites
+
+=head2 Africa
+
+=over 4
+
+=item South Africa
+
+ http://cpan.mirror.ac.za/
+ ftp://cpan.mirror.ac.za/
+ http://mirror.is.co.za/pub/cpan/
+ ftp://ftp.is.co.za/pub/cpan/
+ ftp://ftp.saix.net/pub/CPAN/
+
+=back
+
+=head2 Asia
+
+=over 4
+
+=item Hong Kong
+
+ http://ftp.cuhk.edu.hk/pub/packages/perl/CPAN/
+ ftp://ftp.cuhk.edu.hk/pub/packages/perl/CPAN/
+ http://mirrors.geoexpat.com/cpan/
+
+=item India
+
+ http://perlmirror.indialinks.com/
+
+=item Indonesia
+
+ http://cpan.biz.net.id/
+ http://komo.vlsm.org/CPAN/
+ ftp://komo.vlsm.org/CPAN/
+ http://cpan.pesat.net.id/
+ http://mirror.unej.ac.id/cpan/
+ ftp://mirror.unej.ac.id/cpan/
+
+=item Japan
+
+ ftp://ftp.u-aizu.ac.jp/pub/CPAN
+ ftp://ftp.kddilabs.jp/CPAN/
+ http://ftp.nara.wide.ad.jp/pub/CPAN/
+ ftp://ftp.nara.wide.ad.jp/pub/CPAN/
+ http://ftp.jaist.ac.jp/pub/CPAN/
+ ftp://ftp.jaist.ac.jp/pub/CPAN/
+ ftp://ftp.dti.ad.jp/pub/lang/CPAN/
+ ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/
+ http://ftp.riken.jp/lang/CPAN/
+ ftp://ftp.riken.jp/lang/CPAN/
+ http://ftp.yz.yamagata-u.ac.jp/pub/lang/cpan/
+ ftp://ftp.yz.yamagata-u.ac.jp/pub/lang/cpan/
+
+=item Kazakhstan
+
+ http://mirror.linuxiso.kz/CPAN/
+
+=item Republic of Korea
-=item Africa
-
- South Africa ftp://ftp.is.co.za/programming/perl/CPAN/
- ftp://ftp.saix.net/pub/CPAN/
- ftp://ftp.sun.ac.za/CPAN/
- ftp://ftpza.co.za/pub/mirrors/cpan/
-
-
-=item Asia
-
- China ftp://freesoft.cei.gov.cn/pub/languages/perl/CPAN/
- Hong Kong ftp://ftp.pacific.net.hk/pub/mirror/CPAN/
- Indonesia ftp://malone.piksi.itb.ac.id/pub/CPAN/
- Israel ftp://bioinfo.weizmann.ac.il/pub/software/perl/CPAN/
- Japan ftp://ftp.dti.ad.jp/pub/lang/CPAN/
- ftp://ftp.jaist.ac.jp/pub/lang/perl/CPAN/
- ftp://ftp.lab.kdd.co.jp/lang/perl/CPAN/
- ftp://ftp.meisei-u.ac.jp/pub/CPAN/
- ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/
- ftp://mirror.nucba.ac.jp/mirror/Perl/
- Saudi-Arabia ftp://ftp.isu.net.sa/pub/CPAN/
- Singapore ftp://ftp.nus.edu.sg/pub/unix/perl/CPAN/
- South Korea ftp://ftp.bora.net/pub/CPAN/
- ftp://ftp.kornet.net/pub/CPAN/
- ftp://ftp.nuri.net/pub/CPAN/
- Taiwan ftp://coda.nctu.edu.tw/computer-languages/perl/CPAN/
- ftp://ftp.ee.ncku.edu.tw/pub3/perl/CPAN/
- ftp://ftp1.sinica.edu.tw/pub1/perl/CPAN/
- Thailand ftp://ftp.nectec.or.th/pub/mirrors/CPAN/
-
-
-=item Australasia
-
- Australia ftp://cpan.topend.com.au/pub/CPAN/
- ftp://ftp.labyrinth.net.au/pub/perl-CPAN/
- ftp://ftp.sage-au.org.au/pub/compilers/perl/CPAN/
- ftp://mirror.aarnet.edu.au/pub/perl/CPAN/
- New Zealand ftp://ftp.auckland.ac.nz/pub/perl/CPAN/
- ftp://sunsite.net.nz/pub/languages/perl/CPAN/
-
-
-=item Central America
-
- Costa Rica ftp://ftp.ucr.ac.cr/pub/Unix/CPAN/
-
-
-=item Europe
-
- Austria ftp://ftp.tuwien.ac.at/pub/languages/perl/CPAN/
- Belgium ftp://ftp.kulnet.kuleuven.ac.be/pub/mirror/CPAN/
- Bulgaria ftp://ftp.ntrl.net/pub/mirrors/CPAN/
- Croatia ftp://ftp.linux.hr/pub/CPAN/
- Czech Republic ftp://ftp.fi.muni.cz/pub/perl/
- ftp://sunsite.mff.cuni.cz/Languages/Perl/CPAN/
- Denmark ftp://sunsite.auc.dk/pub/languages/perl/CPAN/
- Estonia ftp://ftp.ut.ee/pub/languages/perl/CPAN/
- Finland ftp://ftp.funet.fi/pub/languages/perl/CPAN/
- France ftp://ftp.grolier.fr/pub/perl/CPAN/
- ftp://ftp.lip6.fr/pub/perl/CPAN/
- ftp://ftp.oleane.net/pub/mirrors/CPAN/
- ftp://ftp.pasteur.fr/pub/computing/CPAN/
- ftp://ftp.uvsq.fr/pub/perl/CPAN/
- German ftp://ftp.gigabell.net/pub/CPAN/
- Germany ftp://ftp.archive.de.uu.net/pub/CPAN/
- ftp://ftp.freenet.de/pub/ftp.cpan.org/pub/
- ftp://ftp.gmd.de/packages/CPAN/
- ftp://ftp.gwdg.de/pub/languages/perl/CPAN/
-
-ftp://ftp.leo.org/pub/comp/general/programming/languages/script/perl/CPAN/
- ftp://ftp.mpi-sb.mpg.de/pub/perl/CPAN/
- ftp://ftp.rz.ruhr-uni-bochum.de/pub/CPAN/
- ftp://ftp.uni-erlangen.de/pub/source/CPAN/
- ftp://ftp.uni-hamburg.de/pub/soft/lang/perl/CPAN/
- Germany ftp://ftp.archive.de.uu.net/pub/CPAN/
- ftp://ftp.freenet.de/pub/ftp.cpan.org/pub/
- ftp://ftp.gmd.de/packages/CPAN/
- ftp://ftp.gwdg.de/pub/languages/perl/CPAN/
-
-ftp://ftp.leo.org/pub/comp/general/programming/languages/script/perl/CPAN/
- ftp://ftp.mpi-sb.mpg.de/pub/perl/CPAN/
- ftp://ftp.rz.ruhr-uni-bochum.de/pub/CPAN/
- ftp://ftp.uni-erlangen.de/pub/source/CPAN/
- ftp://ftp.uni-hamburg.de/pub/soft/lang/perl/CPAN/
- Greece ftp://ftp.ntua.gr/pub/lang/perl/
- Hungary ftp://ftp.kfki.hu/pub/packages/perl/CPAN/
- Iceland ftp://ftp.gm.is/pub/CPAN/
- Ireland ftp://cpan.indigo.ie/pub/CPAN/
- ftp://sunsite.compapp.dcu.ie/pub/perl/
- Italy ftp://cis.uniRoma2.it/CPAN/
- ftp://ftp.flashnet.it/pub/CPAN/
- ftp://ftp.unina.it/pub/Other/CPAN/
- ftp://ftp.unipi.it/pub/mirror/perl/CPAN/
- Netherlands ftp://ftp.cs.uu.nl/mirror/CPAN/
- ftp://ftp.nluug.nl/pub/languages/perl/CPAN/
- Norway ftp://ftp.uit.no/pub/languages/perl/cpan/
- ftp://sunsite.uio.no/pub/languages/perl/CPAN/
- Poland ftp://ftp.man.torun.pl/pub/CPAN/
- ftp://ftp.pk.edu.pl/pub/lang/perl/CPAN/
- ftp://sunsite.icm.edu.pl/pub/CPAN/
- Portugal ftp://ftp.ci.uminho.pt/pub/mirrors/cpan/
- ftp://ftp.ist.utl.pt/pub/CPAN/
- ftp://ftp.ua.pt/pub/CPAN/
- Romania ftp://ftp.dnttm.ro/pub/CPAN/
- Russia ftp://ftp.chg.ru/pub/lang/perl/CPAN/
- ftp://ftp.sai.msu.su/pub/lang/perl/CPAN/
- Slovakia ftp://ftp.entry.sk/pub/languages/perl/CPAN/
- Slovenia ftp://ftp.arnes.si/software/perl/CPAN/
- Spain ftp://ftp.etse.urv.es/pub/perl/
- ftp://ftp.rediris.es/mirror/CPAN/
- Sweden ftp://ftp.sunet.se/pub/lang/perl/CPAN/
- Switzerland ftp://sunsite.cnlab-switch.ch/mirror/CPAN/
- Turkey ftp://sunsite.bilkent.edu.tr/pub/languages/CPAN/
- United Kingdom ftp://ftp.demon.co.uk/pub/mirrors/perl/CPAN/
- ftp://ftp.flirble.org/pub/languages/perl/CPAN/
-
-ftp://ftp.mirror.ac.uk/sites/ftp.funet.fi/pub/languages/perl/CPAN/
- ftp://ftp.plig.org/pub/CPAN/
- ftp://sunsite.doc.ic.ac.uk/packages/CPAN/
-
-
-=item North America
-
- Alberta ftp://sunsite.ualberta.ca/pub/Mirror/CPAN/
- California ftp://cpan.nas.nasa.gov/pub/perl/CPAN/
- ftp://cpan.valueclick.com/CPAN/
- ftp://ftp.cdrom.com/pub/perl/CPAN/
- http://download.sourceforge.net/mirrors/CPAN/
- Colorado ftp://ftp.cs.colorado.edu/pub/perl/CPAN/
- Florida ftp://ftp.cise.ufl.edu/pub/perl/CPAN/
- Georgia ftp://ftp.twoguys.org/CPAN/
- Illinois ftp://uiarchive.uiuc.edu/pub/lang/perl/CPAN/
- Indiana ftp://csociety-ftp.ecn.purdue.edu/pub/CPAN/
- ftp://ftp.uwsg.indiana.edu/pub/perl/CPAN/
- Kentucky ftp://ftp.uky.edu/CPAN/
- Manitoba ftp://theoryx5.uwinnipeg.ca/pub/CPAN/
- Massachusetts
-ftp://ftp.ccs.neu.edu/net/mirrors/ftp.funet.fi/pub/languages/perl/CPAN/
- ftp://ftp.iguide.com/pub/mirrors/packages/perl/CPAN/
- Mexico ftp://ftp.msg.com.mx/pub/CPAN/
- New York ftp://ftp.deao.net/pub/CPAN/
- ftp://ftp.rge.com/pub/languages/perl/
- North Carolina ftp://ftp.duke.edu/pub/perl/
- Nova Scotia ftp://cpan.chebucto.ns.ca/pub/CPAN/
- Oklahoma ftp://ftp.ou.edu/mirrors/CPAN/
- Ontario ftp://ftp.crc.ca/pub/packages/lang/perl/CPAN/
- Oregon ftp://ftp.orst.edu/pub/packages/CPAN/
- Pennsylvania ftp://ftp.epix.net/pub/languages/perl/
- Tennessee ftp://ftp.sunsite.utk.edu/pub/CPAN/
- Texas ftp://ftp.sedl.org/pub/mirrors/CPAN/
- ftp://jhcloos.com/pub/mirror/CPAN/
- Utah ftp://mirror.xmission.com/CPAN/
- Virginia ftp://ftp.perl.org/pub/perl/CPAN/
- ftp://ruff.cs.jmu.edu/pub/CPAN/
- Washington ftp://ftp-mirror.internap.com/pub/CPAN/
- ftp://ftp.llarian.net/pub/CPAN/
- ftp://ftp.spu.edu/pub/CPAN/
-
-
-=item South America
-
- Brazil ftp://cpan.if.usp.br/pub/mirror/CPAN/
- ftp://ftp.matrix.com.br/pub/perl/
- Chile ftp://sunsite.dcc.uchile.cl/pub/Lang/PERL/
+ http://ftp.kaist.ac.kr/pub/CPAN
+ ftp://ftp.kaist.ac.kr/pub/CPAN
+ http://cpan.mirror.cdnetworks.com/
+ ftp://cpan.mirror.cdnetworks.com/CPAN/
+ http://cpan.sarang.net/
+ ftp://cpan.sarang.net/CPAN/
+
+=item Russia
+
+ http://cpan.tomsk.ru/
+ ftp://cpan.tomsk.ru/
+
+=item Singapore
+
+ http://mirror.averse.net/pub/CPAN
+ ftp://mirror.averse.net/pub/CPAN
+ http://cpan.mirror.choon.net/
+ http://cpan.oss.eznetsols.org
+ ftp://ftp.oss.eznetsols.org/cpan
+
+=item Taiwan
+
+ http://ftp.cse.yzu.edu.tw/pub/CPAN/
+ ftp://ftp.cse.yzu.edu.tw/pub/CPAN/
+ http://cpan.nctu.edu.tw/
+ ftp://cpan.nctu.edu.tw/
+ ftp://ftp.ncu.edu.tw/CPAN/
+ http://cpan.cdpa.nsysu.edu.tw/
+ ftp://cpan.cdpa.nsysu.edu.tw/Unix/Lang/CPAN/
+ http://cpan.stu.edu.tw
+ ftp://ftp.stu.edu.tw/CPAN
+ http://ftp.stu.edu.tw/CPAN
+ ftp://ftp.stu.edu.tw/pub/CPAN
+ http://cpan.cs.pu.edu.tw/
+ ftp://cpan.cs.pu.edu.tw/pub/CPAN
+
+=item Thailand
+
+ http://mirrors.issp.co.th/cpan/
+ ftp://mirrors.issp.co.th/cpan/
+
+=item Turkey
+
+ http://cpan.gazi.edu.tr/
+ http://cpan.ulak.net.tr
+ ftp://ftp.ulak.net.tr/pub/CPAN
+
+=item Viet Nam
+
+ http://mirror-fpt-telecom.fpt.net/cpan/
+ ftp://mirror-fpt-telecom.fpt.net/cpan/
+
+=back
+
+=head2 Central America
+
+=over 4
+
+=item Costa Rica
+
+ http://mirrors.ucr.ac.cr/CPAN/
+ ftp://mirrors.ucr.ac.cr/CPAN/
=back
+=head2 Europe
+
+=over 4
+
+=item Austria
+
+ http://cpan.inode.at/
+ ftp://cpan.inode.at
+ http://gd.tuwien.ac.at/languages/perl/CPAN/
+ ftp://gd.tuwien.ac.at/pub/CPAN/
+
+=item Belgium
+
+ http://ftp.belnet.be/mirror/ftp.cpan.org/
+ ftp://ftp.belnet.be/mirror/ftp.cpan.org/
+ http://ftp.easynet.be/pub/CPAN/
+ http://cpan.weepee.org/
+ http://cpan.fluoline.net/
+
+=item Bosnia and Herzegovina
+
+ http://cpan.blic.net/
+
+=item Bulgaria
+
+ http://cpan.cbox.biz/
+ ftp://cpan.cbox.biz/cpan/
+ http://cpan.digsys.bg/
+ ftp://ftp.digsys.bg/pub/CPAN
+
+=item Croatia
+
+ http://ftp.carnet.hr/pub/CPAN/
+ ftp://ftp.carnet.hr/pub/CPAN/
+
+=item Czech Republic
+
+ ftp://ftp.fi.muni.cz/pub/CPAN/
+ http://archive.cpan.cz/
+
+=item Denmark
+
+ http://mirrors.dotsrc.org/cpan
+ ftp://mirrors.dotsrc.org/cpan/
+ http://www.cpan.dk/
+ http://mirror.uni-c.dk/pub/CPAN/
+
+=item Finland
+
+ ftp://ftp.funet.fi/pub/languages/perl/CPAN/
+ http://mirror.eunet.fi/CPAN
+
+=item France
+
+ http://cpan.enstimac.fr/
+ ftp://ftp.inria.fr/pub/CPAN/
+ http://distrib-coffee.ipsl.jussieu.fr/pub/mirrors/cpan/
+ ftp://distrib-coffee.ipsl.jussieu.fr/pub/mirrors/cpan/
+ ftp://ftp.lip6.fr/pub/perl/CPAN/
+ http://mir2.ovh.net/ftp.cpan.org
+ ftp://mir1.ovh.net/ftp.cpan.org
+ http://cpan.miroir-francais.fr/
+ ftp://miroir-francais.fr/pub/cpan/
+ ftp://ftp.oleane.net/pub/CPAN/
+ http://ftp.crihan.fr/mirrors/ftp.cpan.org/
+ ftp://ftp.crihan.fr/mirrors/ftp.cpan.org/
+ http://ftp.u-strasbg.fr/CPAN
+ ftp://ftp.u-strasbg.fr/CPAN
+ http://cpan.cict.fr/
+ ftp://cpan.cict.fr/pub/CPAN/
+
+=item Germany
+
+ ftp://ftp.fu-berlin.de/unix/languages/perl/
+ http://mirrors.softliste.de/cpan/
+ ftp://ftp.rub.de/pub/CPAN/
+ http://www.planet-elektronik.de/CPAN/
+ http://ftp.hosteurope.de/pub/CPAN/
+ ftp://ftp.hosteurope.de/pub/CPAN/
+ http://www.mirrorspace.org/cpan/
+ http://mirror.netcologne.de/cpan/
+ ftp://mirror.netcologne.de/cpan/
+ ftp://ftp.freenet.de/pub/ftp.cpan.org/pub/CPAN/
+ http://ftp-stud.hs-esslingen.de/pub/Mirrors/CPAN/
+ ftp://ftp-stud.hs-esslingen.de/pub/Mirrors/CPAN/
+ http://mirrors.zerg.biz/cpan/
+ http://ftp.gwdg.de/pub/languages/perl/CPAN/
+ ftp://ftp.gwdg.de/pub/languages/perl/CPAN/
+ http://dl.ambiweb.de/mirrors/ftp.cpan.org/
+ http://cpan.mirror.clusters.kg/
+ http://cpan.mirror.iphh.net/
+ ftp://cpan.mirror.iphh.net/pub/CPAN/
+ http://cpan.mirroring.de/
+ http://mirror.informatik.uni-mannheim.de/pub/mirrors/CPAN/
+ ftp://mirror.informatik.uni-mannheim.de/pub/mirrors/CPAN/
+ http://ftp.cw.net/pub/CPAN/
+ ftp://ftp.cw.net/pub/CPAN/
+ http://cpan.cpantesters.org/
+ ftp://cpan.cpantesters.org/CPAN/
+ http://cpan.mirrored.de/
+ ftp://mirror.petamem.com/CPAN/
+ http://cpan.noris.de/
+ ftp://cpan.noris.de/pub/CPAN/
+ ftp://ftp.mpi-sb.mpg.de/pub/perl/CPAN/
+ ftp://ftp.gmd.de/mirrors/CPAN/
+
+=item Greece
+
+ ftp://ftp.forthnet.gr/pub/languages/perl/CPAN
+ ftp://ftp.ntua.gr/pub/lang/perl/
+ http://cpan.cc.uoc.gr/
+ ftp://ftp.cc.uoc.gr/mirrors/CPAN/
+
+=item Hungary
+
+ http://cpan.mirrors.enexis.hu/
+ ftp://cpan.mirrors.enexis.hu/mirrors/cpan/
+ http://cpan.hu/
+
+=item Iceland
+
+ http://ftp.rhnet.is/pub/CPAN/
+ ftp://ftp.rhnet.is/pub/CPAN/
+
+=item Ireland
+
+ http://ftp.esat.net/pub/languages/perl/CPAN/
+ ftp://ftp.esat.net/pub/languages/perl/CPAN/
+ http://ftp.heanet.ie/mirrors/ftp.perl.org/pub/CPAN
+ ftp://ftp.heanet.ie/mirrors/ftp.perl.org/pub/CPAN
+
+=item Italy
+
+ http://bo.mirror.garr.it/mirrors/CPAN/
+ http://cpan.panu.it/
+ ftp://ftp.panu.it/pub/mirrors/perl/CPAN/
+ http://cpan.fastbull.org/
+
+=item Latvia
+
+ http://kvin.lv/pub/CPAN/
+
+=item Lithuania
+
+ http://ftp.litnet.lt/pub/CPAN/
+ ftp://ftp.litnet.lt/pub/CPAN/
+
+=item Malta
+
+ http://cpan.waldonet.net.mt/
+
+=item Netherlands
+
+ ftp://ftp.quicknet.nl/pub/CPAN/
+ http://mirror.hostfuss.com/CPAN/
+ ftp://mirror.hostfuss.com/CPAN/
+ http://mirrors3.kernel.org/cpan/
+ ftp://mirrors3.kernel.org/pub/CPAN/
+ http://cpan.osmirror.nl/
+ ftp://ftp.osmirror.nl/pub/cpan/
+ http://cpan.mirror.versatel.nl/
+ ftp://ftp.mirror.versatel.nl/cpan/
+ ftp://download.xs4all.nl/pub/mirror/CPAN/
+ http://mirror.leaseweb.com/CPAN/
+ ftp://mirror.leaseweb.com/CPAN/
+ ftp://ftp.cpan.nl/pub/CPAN/
+ http://archive.cs.uu.nl/mirror/CPAN/
+ ftp://ftp.cs.uu.nl/mirror/CPAN/
+ http://https://luxitude.net/cpan/
+
+=item Norway
+
+ ftp://ftp.uninett.no/pub/languages/perl/CPAN
+ ftp://ftp.uit.no/pub/languages/perl/cpan/
+
+=item Poland
+
+ http://mirror.icis.pcz.pl/CPAN/
+ ftp://mirror.icis.pcz.pl/CPAN/
+ http://piotrkosoft.net/pub/mirrors/CPAN/
+ ftp://ftp.piotrkosoft.net/pub/mirrors/CPAN/
+ http://ftp.man.poznan.pl/pub/CPAN
+ ftp://ftp.man.poznan.pl/pub/CPAN
+ ftp://sunsite.icm.edu.pl/pub/CPAN/
+ ftp://ftp.tpnet.pl/d4/CPAN/
+
+=item Portugal
+
+ http://cpan.dei.uc.pt/
+ ftp://ftp.dei.uc.pt/pub/CPAN
+ ftp://ftp.ist.utl.pt/pub/CPAN/
+ http://cpan.perl.pt/
+ http://cpan.ip.pt/
+ ftp://cpan.ip.pt/pub/cpan/
+ http://mirrors.nfsi.pt/CPAN/
+ ftp://mirrors.nfsi.pt/pub/CPAN/
+ http://cpan.dcc.fc.up.pt/
+
+=item Romania
+
+ http://ftp.astral.ro/pub/CPAN/
+ ftp://ftp.astral.ro/pub/CPAN/
+ ftp://ftp.lug.ro/CPAN
+ http://mirrors.xservers.ro/CPAN/
+ http://mirrors.hostingromania.ro/ftp.cpan.org/
+ ftp://ftp.hostingromania.ro/mirrors/ftp.cpan.org/
+ ftp://ftp.iasi.roedu.net/pub/mirrors/ftp.cpan.org/
+ ftp://ftp.ambra.ro/pub/CPAN
+
+=item Russia
+
+ ftp://ftp.aha.ru/CPAN/
+ http://cpan.rinet.ru/
+ ftp://cpan.rinet.ru/pub/mirror/CPAN/
+ ftp://ftp.SpringDaemons.com/pub/CPAN/
+ http://cpan.nx1.ru/
+ ftp://cpan.nx1.ru/
+ http://mirror.rol.ru/CPAN/
+ http://ftp.silvernet.ru/CPAN/
+ http://ftp.spbu.ru/CPAN/
+ ftp://ftp.spbu.ru/CPAN/
+
+=item Slovakia
+
+ http://cpan.fyxm.net/
+
+=item Slovenia
+
+ http://www.klevze.si/cpan
+
+=item Spain
+
+ http://osl.ugr.es/CPAN/
+ ftp://ftp.rediris.es/mirror/CPAN/
+ http://ftp.gui.uva.es/sites/cpan.org/
+ ftp://ftp.gui.uva.es/sites/cpan.org/
+
+=item Sweden
+
+ http://mirrors4.kernel.org/cpan/
+ ftp://mirrors4.kernel.org/pub/CPAN/
+
+=item Switzerland
+
+ http://cpan.mirror.solnet.ch/
+ ftp://ftp.solnet.ch/mirror/CPAN/
+ http://mirror.switch.ch/ftp/mirror/CPAN/
+ ftp://mirror.switch.ch/mirror/CPAN/
+
+=item Ukraine
+
+ http://cpan.makeperl.org/
+ ftp://cpan.makeperl.org/pub/CPAN
+ http://cpan.org.ua/
+ http://no-more.kiev.ua/CPAN/
+ ftp://no-more.kiev.ua/pub/CPAN/
+ http://cpan.gafol.net/
+ ftp://ftp.gafol.net/pub/cpan/
+
+=item United Kingdom
+
+ http://www.mirrorservice.org/sites/ftp.funet.fi/pub/languages/perl/CPAN/
+ ftp://ftp.mirrorservice.org/sites/ftp.funet.fi/pub/languages/perl/CPAN/
+ http://mirror.tje.me.uk/pub/mirrors/ftp.cpan.org/
+ ftp://mirror.tje.me.uk/pub/mirrors/ftp.cpan.org/
+ http://www.mirror.8086.net/sites/CPAN/
+ ftp://ftp.mirror.8086.net/sites/CPAN/
+ http://cpan.mirror.anlx.net/
+ ftp://ftp.mirror.anlx.net/CPAN/
+ http://mirror.bytemark.co.uk/CPAN/
+ ftp://mirror.bytemark.co.uk/CPAN/
+ http://cpan.etla.org/
+ ftp://cpan.etla.org/pub/CPAN
+ ftp://ftp.demon.co.uk/pub/CPAN/
+ http://mirror.sov.uk.goscomb.net/CPAN/
+ ftp://mirror.sov.uk.goscomb.net/pub/CPAN/
+ http://ftp.plig.net/pub/CPAN/
+ ftp://ftp.plig.net/pub/CPAN/
+ http://ftp.ticklers.org/pub/CPAN/
+ ftp://ftp.ticklers.org/pub/CPAN/
+ http://cpan.mirrors.uk2.net/
+ ftp://mirrors.uk2.net/pub/CPAN/
+ http://mirror.ox.ac.uk/sites/www.cpan.org/
+ ftp://mirror.ox.ac.uk/sites/www.cpan.org/
+
+=back
+
+=head2 North America
+
+=over 4
+
+=item Bahamas
+
+ http://www.securehost.com/mirror/CPAN/
+
+=item Canada
+
+ http://cpan.justanotherperlhacker.com/pub/CPAN/
+ ftp://cpan.justanotherperlhacker.com/pub/CPAN/
+ http://cpan.arcticnetwork.ca
+ ftp://mirror.arcticnetwork.ca/pub/CPAN
+ http://cpan.sunsite.ualberta.ca/
+ ftp://cpan.sunsite.ualberta.ca/pub/CPAN/
+ http://theoryx5.uwinnipeg.ca/pub/CPAN/
+ ftp://theoryx5.uwinnipeg.ca/pub/CPAN/
+ http://arwen.cs.dal.ca/mirror/CPAN/
+ ftp://arwen.cs.dal.ca/pub/mirror/CPAN/
+ http://CPAN.mirror.rafal.ca/
+ ftp://CPAN.mirror.rafal.ca/pub/CPAN/
+ ftp://ftp.nrc.ca/pub/CPAN/
+ http://mirror.csclub.uwaterloo.ca/pub/CPAN/
+ ftp://mirror.csclub.uwaterloo.ca/pub/CPAN/
+
+=item Mexico
+
+ http://www.msg.com.mx/CPAN/
+ ftp://ftp.msg.com.mx/pub/CPAN/
+
+=item United States
+
+=over 8
+
+=item Alabama
+
+ http://mirror.hiwaay.net/CPAN/
+ ftp://mirror.hiwaay.net/CPAN/
+
+=item California
+
+ http://cpan.knowledgematters.net/
+ http://cpan.binkerton.com/
+ http://cpan.develooper.com/
+ http://mirrors.gossamer-threads.com/CPAN
+ http://cpan.schatt.com/
+ http://mirrors.kernel.org/cpan/
+ ftp://mirrors.kernel.org/pub/CPAN
+ http://mirrors2.kernel.org/cpan/
+ ftp://mirrors2.kernel.org/pub/CPAN/
+ http://cpan.mirrors.redwire.net/
+ http://cpan.mirror.facebook.net/
+ http://mirrors1.kernel.org/cpan/
+ ftp://mirrors1.kernel.org/pub/CPAN/
+ http://cpan-sj.viaverio.com/
+ ftp://cpan-sj.viaverio.com/pub/CPAN/
+ http://www.perl.com/CPAN/
+ http://cpan.yahoo.com/
+
+=item Florida
+
+ ftp://ftp.cise.ufl.edu/pub/mirrors/CPAN/
+ http://mirror.atlantic.net/pub/CPAN/
+ ftp://mirror.atlantic.net/pub/CPAN/
+ http://mirror.candidhosting.com/pub/CPAN
+ ftp://mirror.candidhosting.com/pub/CPAN
+
+=item Idaho
+
+ http://mirror.its.uidaho.edu/pub/cpan/
+ ftp://mirror.its.uidaho.edu/cpan/
+
+=item Illinois
+
+ http://cpan.mirrors.hoobly.com/
+ http://cpan.uchicago.edu/pub/CPAN/
+ ftp://cpan.uchicago.edu/pub/CPAN/
+ http://mirrors.servercentral.net/CPAN/
+ http://www.stathy.com/CPAN/
+ ftp://www.stathy.com/CPAN/
+
+=item Indiana
+
+ ftp://ftp.uwsg.iu.edu/pub/perl/CPAN/
+ http://cpan.netnitco.net/
+ ftp://cpan.netnitco.net/pub/mirrors/CPAN/
+ http://ftp.ndlug.nd.edu/pub/perl/
+ ftp://ftp.ndlug.nd.edu/pub/perl/
+ http://fx.saintjoe.edu/pub/CPAN
+
+=item Massachusetts
+
+ ftp://ftp.ccs.neu.edu/net/mirrors/ftp.funet.fi/pub/languages/perl/CPAN/
+
+=item Michigan
+
+ http://ftp.wayne.edu/cpan/
+ ftp://ftp.wayne.edu/cpan/
+
+=item Minnesota
+
+ http://cpan.msi.umn.edu/
+
+=item New Jersey
+
+ http://mirror.datapipe.net/CPAN/
+ ftp://mirror.datapipe.net/pub/CPAN/
+
+=item New York
+
+ http://mirrors.24-7-solutions.net/pub/CPAN/
+ ftp://mirrors.24-7-solutions.net/pub/CPAN/
+ http://mirror.cc.columbia.edu/pub/software/cpan/
+ ftp://mirror.cc.columbia.edu/pub/software/cpan/
+ http://cpan.belfry.net/
+ http://cpan.erlbaum.net/
+ ftp://cpan.erlbaum.net/CPAN/
+ http://cpan.hexten.net/
+ ftp://cpan.hexten.net/
+ http://ftp.fxcorporate.com/CPAN/
+ ftp://ftp.fxcorporate.com/pub/CPAN/
+ ftp://mirror.nyi.net/CPAN/
+ http://mirror.rit.edu/CPAN/
+ ftp://mirror.rit.edu/CPAN/
+
+=item North Carolina
+
+ http://www.ibiblio.org/pub/mirrors/CPAN
+ ftp://ftp.ncsu.edu/pub/mirror/CPAN/
+
+=item Oregon
+
+ http://ftp.osuosl.org/pub/CPAN/
+ ftp://ftp.osuosl.org/pub/CPAN/
+
+=item Pennsylvania
+
+ http://ftp.epix.net/CPAN/
+ ftp://ftp.epix.net/pub/languages/perl/
+ http://cpan.pair.com/
+ ftp://cpan.pair.com/pub/CPAN/
+
+=item South Carolina
+
+ http://cpan.mirror.clemson.edu/
+
+=item Tennessee
+
+ http://mira.sunsite.utk.edu/CPAN/
+
+=item Texas
+
+ http://mirror.uta.edu/CPAN
+
+=item Utah
+
+ http://cpan.cs.utah.edu
+ ftp://cpan.cs.utah.edu/pub/CPAN/
+ ftp://mirror.xmission.com/CPAN/
+
+=item Virginia
+
+ http://cpan-du.viaverio.com/
+ ftp://cpan-du.viaverio.com/pub/CPAN/
+ http://perl.secsup.org/
+ ftp://perl.secsup.org/pub/perl/
+ ftp://mirror.cogentco.com/pub/CPAN/
+
+=item Washington
+
+ http://cpan.llarian.net/
+ ftp://cpan.llarian.net/pub/CPAN/
+ ftp://ftp-mirror.internap.com/pub/CPAN/
+
+=item Wisconsin
+
+ http://cpan.mirrors.tds.net
+ ftp://cpan.mirrors.tds.net/pub/CPAN
+ http://mirror.sit.wisc.edu/pub/CPAN/
+ ftp://mirror.sit.wisc.edu/pub/CPAN/
+
+=back
+
+=back
+
+=head2 Oceania
+
+=over 4
+
+=item Australia
+
+ http://mirror.internode.on.net/pub/cpan/
+ ftp://mirror.internode.on.net/pub/cpan/
+ http://cpan.mirror.aussiehq.net.au/
+ http://mirror.as24220.net/cpan/
+ ftp://mirror.as24220.net/cpan/
+
+=item New Zealand
+
+ ftp://ftp.auckland.ac.nz/pub/perl/CPAN/
+ http://cpan.inspire.net.nz
+ ftp://cpan.inspire.net.nz/cpan
+ http://cpan.catalyst.net.nz/CPAN/
+ ftp://cpan.catalyst.net.nz/pub/CPAN/
+
+=back
+
+=head2 South America
+
+=over 4
+
+=item Argentina
+
+ http://cpan.patan.com.ar/
+ http://cpan.localhost.net.ar
+ ftp://mirrors.localhost.net.ar/pub/mirrors/CPAN
+
+=item Brazil
+
+ ftp://cpan.pop-mg.com.br/pub/CPAN/
+ http://ftp.pucpr.br/CPAN
+ ftp://ftp.pucpr.br/CPAN
+ http://cpan.kinghost.net/
+ ftp://ftp.linorg.usp.br/CPAN
+
+=item Chile
+
+ http://cpan.dcc.uchile.cl/
+ ftp://cpan.dcc.uchile.cl/pub/lang/cpan/
+
+=item Colombia
+
+ http://www.laqee.unal.edu.co/CPAN/
+
+=back
+
+=head2 RSYNC Mirrors
+
+ mirror.as24220.net::cpan
+ cpan.inode.at::CPAN
+ gd.tuwien.ac.at::CPAN
+ ftp.belnet.be::packages/cpan
+ rsync.linorg.usp.br::CPAN
+ rsync.arcticnetwork.ca::CPAN
+ CPAN.mirror.rafal.ca::CPAN
+ mirror.csclub.uwaterloo.ca::CPAN
+ theoryx5.uwinnipeg.ca::CPAN
+ www.laqee.unal.edu.co::CPAN
+ mirror.uni-c.dk::CPAN
+ rsync.nic.funet.fi::CPAN
+ rsync://distrib-coffee.ipsl.jussieu.fr/pub/mirrors/cpan/
+ mir1.ovh.net::CPAN
+ miroir-francais.fr::cpan
+ ftp.crihan.fr::CPAN
+ rsync://mirror.cict.fr/cpan/
+ rsync://mirror.netcologne.de/cpan/
+ ftp-stud.hs-esslingen.de::CPAN/
+ ftp.gwdg.de::FTP/languages/perl/CPAN/
+ cpan.mirror.iphh.net::CPAN
+ cpan.cpantesters.org::cpan
+ cpan.hu::CPAN
+ komo.vlsm.org::CPAN
+ mirror.unej.ac.id::cpan
+ ftp.esat.net::/pub/languages/perl/CPAN
+ ftp.heanet.ie::mirrors/ftp.perl.org/pub/CPAN
+ rsync.panu.it::CPAN
+ cpan.fastbull.org::CPAN
+ ftp.kddilabs.jp::cpan
+ ftp.nara.wide.ad.jp::cpan/
+ rsync://ftp.jaist.ac.jp/pub/CPAN/
+ rsync://ftp.riken.jp/cpan/
+ mirror.linuxiso.kz::CPAN
+ rsync://mirrors3.kernel.org/mirrors/CPAN/
+ rsync://rsync.osmirror.nl/cpan/
+ mirror.leaseweb.com::CPAN
+ cpan.nautile.nc::CPAN
+ mirror.icis.pcz.pl::CPAN
+ piotrkosoft.net::mirrors/CPAN
+ rsync://cpan.perl.pt/
+ ftp.kaist.ac.kr::cpan
+ cpan.sarang.net::CPAN
+ mirror.averse.net::cpan
+ rsync.oss.eznetsols.org
+ mirror.ac.za::cpan
+ ftp.is.co.za::IS-Mirror/ftp.cpan.org/
+ rsync://ftp.gui.uva.es/cpan/
+ rsync://mirrors4.kernel.org/mirrors/CPAN/
+ ftp.solnet.ch::CPAN
+ ftp.ulak.net.tr::CPAN
+ gafol.net::cpan
+ rsync.mirrorservice.org::ftp.funet.fi/pub/
+ rsync://rsync.mirror.8086.net/CPAN/
+ rsync.mirror.anlx.net::CPAN
+ mirror.bytemark.co.uk::CPAN
+ ftp.plig.net::CPAN
+ rsync://ftp.ticklers.org:CPAN/
+ mirrors.ibiblio.org::CPAN
+ cpan-du.viaverio.com::CPAN
+ mirror.hiwaay.net::CPAN
+ rsync://mira.sunsite.utk.edu/CPAN/
+ cpan.mirrors.tds.net::CPAN
+ mirror.its.uidaho.edu::cpan
+ rsync://mirror.cc.columbia.edu::cpan/
+ ftp.fxcorporate.com::CPAN
+ rsync.atlantic.net::CPAN
+ mirrors.kernel.org::mirrors/CPAN
+ rsync://mirrors2.kernel.org/mirrors/CPAN/
+ cpan.pair.com::CPAN
+ rsync://mirror.rit.edu/CPAN/
+ rsync://mirror.facebook.net/cpan/
+ rsync://mirrors1.kernel.org/mirrors/CPAN/
+ cpan-sj.viaverio.com::CPAN
+
For an up-to-date listing of CPAN sites,
-see http://www.perl.com/perl/CPAN/SITES or ftp://www.perl.com/CPAN/SITES .
+see http://www.cpan.org/SITES or ftp://www.cpan.org/SITES .
=head1 Modules: Creation, Use, and Abuse
Does your module pass the 'empty subclass' test? If you say
C<@SUBCLASS::ISA = qw(YOURCLASS);> your applications should be able
to use SUBCLASS in exactly the same way as YOURCLASS. For example,
-does your application still work if you change: C<$obj = new YOURCLASS;>
-into: C<$obj = new SUBCLASS;> ?
+does your application still work if you change: C<< $obj = YOURCLASS->new(); >>
+into: C<< $obj = SUBCLASS->new(); >> ?
Avoid keeping any state information in your packages. It makes it
difficult for multiple other packages to use yours. Keep state
Always use B<-w>.
-Follow the guidelines in the perlstyle(1) manual.
+Follow the guidelines in L<perlstyle>.
Always use B<-w>.
=over 4
-=item Adding a Copyright Notice.
+=item *
+Adding a Copyright Notice.
How you choose to license your work is a personal decision.
The general mechanism is to assert your Copyright and then make
a declaration of how others may copy/use/modify your work.
-Perl, for example, is supplied with two types of licence: The GNU
-GPL and The Artistic Licence (see the files README, Copying, and
-Artistic). Larry has good reasons for NOT just using the GNU GPL.
+Perl, for example, is supplied with two types of licence: The GNU GPL
+and The Artistic Licence (see the files README, Copying, and Artistic,
+or L<perlgpl> and L<perlartistic>). Larry has good reasons for NOT
+just using the GNU GPL.
My personal recommendation, out of respect for Larry, Perl, and the
Perl community at large is to state something simply like:
Follow the instructions and links on:
- http://www.perl.com/CPAN/modules/00modlist.long.html
- http://www.perl.com/CPAN/modules/04pause.html
+ http://www.cpan.org/modules/00modlist.long.html
+ http://www.cpan.org/modules/04pause.html
or upload to one of these sites:
https://pause.kbx.de/pause/
- http://pause.perl.org/pause/
+ http://pause.perl.org/
and notify <modules@perl.org>.
=back
-=back
-
=head2 Guidelines for Converting Perl 4 Library Scripts into Modules
=over 4
=back
+=back
+
=head1 NOTE
Perl does not enforce private and public parts of its modules as you may
EOF
close MANIFEST or warn "$0: failed to close MANIFEST (../MANIFEST): $!";
-close OUT or warn "$0: failed to close OUT (perlmodlib.tmp): $!";
+close OUT or warn "$0: failed to close OUT (perlmodlib.pod): $!";