Update CPANPLUS to 0.87_02
[p5sagit/p5-mst-13.2.git] / pod / perlmodlib.PL
CommitLineData
2e1d04bc 1#!../miniperl
2
1fa7ca25 3$ENV{LC_ALL} = 'C';
4
291c64f4 5use FindBin;
6chdir $FindBin::Bin or die "$0: Can't chdir $FindBin::Bin: $!";
7
8my $Quiet = @ARGV && $ARGV[0] eq '-q';
9
b7da254d 10open (OUT, ">perlmodlib.pod") or die $!;
1fa7ca25 11my (@pragma, @mod, @MANIFEST);
4d671226 12
291c64f4 13# MANIFEST itself is Unix style filenames, so we have to assume that Unix style
14# filenames will work.
15
2e1d04bc 16open (MANIFEST, "../MANIFEST") or die $!;
4d671226 17@MANIFEST = grep !m</(?:t|demo)/>, <MANIFEST>;
7ef5744c 18push @MANIFEST, 'lib/Config.pod', 'lib/Errno.pm', 'lib/lib.pm',
19 'lib/DynaLoader.pm', 'lib/XSLoader.pm';
2e1d04bc 20
4e42dfb1 21# If run in a clean source tree, these will be missing because they are
22# generated by the build.
23my %generated = (
24 'encoding' => 'Allows you to write your script in non-ascii or non-utf8',
25 'lib' => 'Manipulate @INC at compile time',
26 'ops' => 'Restrict unsafe operations when compiling',
27 'Config' => 'Access Perl configuration information',
28 'DynaLoader' => 'Dynamically load C libraries into Perl code',
29 'Errno' => 'System errno constants',
30 'O' => 'Generic interface to Perl Compiler backends',
31 'Safe' => 'Compile and execute code in restricted compartments',
32 'XSLoader' => 'Dynamically load C libraries into Perl code',
33);
34
35# If run in a clean source tree, these should not be reported.
36# These are considered 'modules' by this script, but they really are not.
37my %suppressed = map {$_ => 1} qw(
38 B::O
39 Encode::encoding
40 Opcode::Safe
41 Opcode::ops
42);
86cf5c17 43
4d671226 44for (@MANIFEST) {
4e42dfb1 45 my $filename;
e8041d9b 46 next unless m|^lib/| or m|^ext/|;
47 my ($filename) = m|^(\S+)|;
4e42dfb1 48 next unless $filename =~ m!\.p(m|od)$!;
e8041d9b 49 unless (open MOD, '<', "../$filename") {
50 warn "Couldn't open ../$filename: $!";
51 next;
4e42dfb1 52 }
4e860d0a 53
1fa7ca25 54
2e1d04bc 55 my ($name, $thing);
56 my $foundit=0;
4e860d0a 57 {
4e42dfb1 58 local $/="";
59 while (<MOD>) {
60 next unless /^=head1 NAME/;
61 $foundit++;
62 last;
63 }
2e1d04bc 64 }
4e860d0a 65 unless ($foundit) {
291c64f4 66 warn "$filename missing =head1 NAME (OK if respective .pod exists)\n"
67 unless $Quiet;
4e42dfb1 68 next;
2e1d04bc 69 }
2e1d04bc 70 my $title = <MOD>;
71 chomp($title);
72 close MOD;
73
74 my $perlname = $filename;
7ef5744c 75 $perlname =~ s!^.*\b(ext|lib)/!!;
4e860d0a 76 $perlname =~ s!\.p(m|od)$!!;
7ef5744c 77 $perlname =~ s!\b(\w+)/\1\b!$1!;
4e860d0a 78 $perlname =~ s!/!::!g;
f46c3222 79 $perlname =~ s!-!::!g;
4e860d0a 80
86cf5c17 81 # modules with non standard locations
82 $perlname =~ s{Base64::QuotedPrint}{QuotedPrint};
83
4e860d0a 84 ($name, $thing) = split / --? /, $title, 2;
85
86 unless ($name and $thing) {
4e42dfb1 87 warn "$filename missing name\n" unless $name;
291c64f4 88 warn "$filename missing thing\n" unless $thing or $Quiet;
4e42dfb1 89 next;
4e860d0a 90 }
2e1d04bc 91
4e42dfb1 92 next if $suppressed{$perlname};
1fa7ca25 93
4e860d0a 94 $thing =~ s/^perl pragma to //i;
95 $thing = ucfirst($thing);
2e1d04bc 96 $title = "=item $perlname\n\n$thing\n\n";
97
1fa7ca25 98 if ($filename =~ /[A-Z]/) {
2e1d04bc 99 push @mod, $title;
100 } else {
101 push @pragma, $title;
102 }
4e42dfb1 103
104 # if we find a generated one via the MANIFEST, no need to add later.
105 delete $generated{$perlname};
106}
107while (my ($name,$desc) = each %generated) {
108 my $title = "=item $name\n\n$desc\n\n";
109 if ($name =~ /[A-Z]/) {
110 push @mod, $title;
111 } else {
112 push @pragma, $title;
113 }
2e1d04bc 114}
115
116print OUT <<'EOF';
c165c82a 117=for maintainers
118Generated by perlmodlib.PL -- DO NOT EDIT!
843dbe26 119
2e1d04bc 120=head1 NAME
121
122perlmodlib - constructing new Perl modules and finding existing ones
123
2e1d04bc 124=head1 THE PERL MODULE LIBRARY
125
7ef5744c 126Many modules are included in the Perl distribution. These are described
2e1d04bc 127below, and all end in F<.pm>. You may discover compiled library
7ef5744c 128files (usually ending in F<.so>) or small pieces of modules to be
2e1d04bc 129autoloaded (ending in F<.al>); these were automatically generated
130by the installation process. You may also discover files in the
131library directory that end in either F<.pl> or F<.ph>. These are
132old libraries supplied so that old programs that use them still
133run. The F<.pl> files will all eventually be converted into standard
134modules, and the F<.ph> files made by B<h2ph> will probably end up
135as extension modules made by B<h2xs>. (Some F<.ph> values may
136already be available through the POSIX, Errno, or Fcntl modules.)
137The B<pl2pm> file in the distribution may help in your conversion,
138but it's just a mechanical process and therefore far from bulletproof.
139
140=head2 Pragmatic Modules
141
142They work somewhat like compiler directives (pragmata) in that they
143tend to affect the compilation of your program, and thus will usually
144work well only when used within a C<use>, or C<no>. Most of these
145are lexically scoped, so an inner BLOCK may countermand them
146by saying:
147
148 no integer;
149 no strict 'refs';
150 no warnings;
151
152which lasts until the end of that BLOCK.
153
154Some pragmas are lexically scoped--typically those that affect the
155C<$^H> hints variable. Others affect the current package instead,
156like C<use vars> and C<use subs>, which allow you to predeclare a
157variables or subroutines within a particular I<file> rather than
158just a block. Such declarations are effective for the entire file
159for which they were declared. You cannot rescind them with C<no
160vars> or C<no subs>.
161
162The following pragmas are defined (and have their own documentation).
163
164=over 12
165
166EOF
167
168print OUT $_ for (sort @pragma);
169
170print OUT <<EOF;
171=back
172
173=head2 Standard Modules
174
175Standard, bundled modules are all expected to behave in a well-defined
176manner with respect to namespace pollution because they use the
177Exporter module. See their own documentation for details.
178
7ef5744c 179It's possible that not all modules listed below are installed on your
180system. For example, the GDBM_File module will not be installed if you
181don't have the gdbm library.
182
2e1d04bc 183=over 12
184
185EOF
186
187print OUT $_ for (sort @mod);
188
189print OUT <<'EOF';
190=back
191
192To find out I<all> modules installed on your system, including
193those without documentation or outside the standard release,
a4373870 194just use the following command (under the default win32 shell,
195double quotes should be used instead of single quotes).
2e1d04bc 196
a4373870 197 % perl -MFile::Find=find -MFile::Spec::Functions -Tlwe \
198 'find { wanted => sub { print canonpath $_ if /\.pm\z/ },
199 no_chdir => 1 }, @INC'
2e1d04bc 200
8518420c 201(The -T is here to prevent '.' from being listed in @INC.)
2e1d04bc 202They should all have their own documentation installed and accessible
203via your system man(1) command. If you do not have a B<find>
204program, you can use the Perl B<find2perl> program instead, which
205generates Perl code as output you can run through perl. If you
206have a B<man> program but it doesn't find your modules, you'll have
207to fix your manpath. See L<perl> for details. If you have no
208system B<man> command, you might try the B<perldoc> program.
209
8518420c 210Note also that the command C<perldoc perllocal> gives you a (possibly
211incomplete) list of the modules that have been further installed on
212your system. (The perllocal.pod file is updated by the standard MakeMaker
213install process.)
214
2e1d04bc 215=head2 Extension Modules
216
217Extension modules are written in C (or a mix of Perl and C). They
218are usually dynamically loaded into Perl if and when you need them,
da75cd15 219but may also be linked in statically. Supported extension modules
2e1d04bc 220include Socket, Fcntl, and POSIX.
221
222Many popular C extension modules do not come bundled (at least, not
223completely) due to their sizes, volatility, or simply lack of time
224for adequate testing and configuration across the multitude of
225platforms on which Perl was beta-tested. You are encouraged to
226look for them on CPAN (described below), or using web search engines
7ef5744c 227like Alta Vista or Google.
2e1d04bc 228
229=head1 CPAN
230
231CPAN stands for Comprehensive Perl Archive Network; it's a globally
232replicated trove of Perl materials, including documentation, style
233guides, tricks and traps, alternate ports to non-Unix systems and
234occasional binary distributions for these. Search engines for
1577cd80 235CPAN can be found at http://www.cpan.org/
2e1d04bc 236
237Most importantly, CPAN includes around a thousand unbundled modules,
238some of which require a C compiler to build. Major categories of
239modules are:
240
241=over
242
243=item *
ac634a9a 244
2e1d04bc 245Language Extensions and Documentation Tools
246
247=item *
ac634a9a 248
2e1d04bc 249Development Support
250
251=item *
ac634a9a 252
2e1d04bc 253Operating System Interfaces
254
255=item *
ac634a9a 256
2e1d04bc 257Networking, Device Control (modems) and InterProcess Communication
258
259=item *
ac634a9a 260
2e1d04bc 261Data Types and Data Type Utilities
262
263=item *
ac634a9a 264
2e1d04bc 265Database Interfaces
266
267=item *
ac634a9a 268
2e1d04bc 269User Interfaces
270
271=item *
ac634a9a 272
2e1d04bc 273Interfaces to / Emulations of Other Programming Languages
274
275=item *
ac634a9a 276
2e1d04bc 277File Names, File Systems and File Locking (see also File Handles)
278
279=item *
ac634a9a 280
2e1d04bc 281String Processing, Language Text Processing, Parsing, and Searching
282
283=item *
ac634a9a 284
2e1d04bc 285Option, Argument, Parameter, and Configuration File Processing
286
287=item *
ac634a9a 288
2e1d04bc 289Internationalization and Locale
290
291=item *
ac634a9a 292
2e1d04bc 293Authentication, Security, and Encryption
294
295=item *
ac634a9a 296
2e1d04bc 297World Wide Web, HTML, HTTP, CGI, MIME
298
299=item *
ac634a9a 300
2e1d04bc 301Server and Daemon Utilities
302
303=item *
ac634a9a 304
2e1d04bc 305Archiving and Compression
306
307=item *
ac634a9a 308
2e1d04bc 309Images, Pixmap and Bitmap Manipulation, Drawing, and Graphing
310
311=item *
ac634a9a 312
2e1d04bc 313Mail and Usenet News
314
315=item *
ac634a9a 316
2e1d04bc 317Control Flow Utilities (callbacks and exceptions etc)
318
319=item *
ac634a9a 320
2e1d04bc 321File Handle and Input/Output Stream Utilities
322
323=item *
ac634a9a 324
2e1d04bc 325Miscellaneous Modules
326
327=back
328
5df44211 329The list of the registered CPAN sites as of this writing follows.
330Please note that the sorting order is alphabetical on fields:
331
332Continent
333 |
334 |-->Country
335 |
336 |-->[state/province]
337 |
338 |-->ftp
339 |
340 |-->[http]
341
342and thus the North American servers happen to be listed between the
343European and the South American sites.
344
345You should try to choose one close to you.
2e1d04bc 346
4e860d0a 347=head2 Africa
348
349=over 4
350
5df44211 351=item South Africa
4e860d0a 352
5c5c2539 353 http://ftp.rucus.ru.ac.za/pub/perl/CPAN/
354 ftp://ftp.rucus.ru.ac.za/pub/perl/CPAN/
5df44211 355 ftp://ftp.is.co.za/programming/perl/CPAN/
5df44211 356 ftp://ftp.saix.net/pub/CPAN/
357 ftp://ftp.sun.ac.za/CPAN/CPAN/
4e860d0a 358
359=back
360
361=head2 Asia
362
363=over 4
364
5df44211 365=item China
4e860d0a 366
5c5c2539 367 http://cpan.linuxforum.net/
5df44211 368 http://cpan.shellhung.org/
369 ftp://ftp.shellhung.org/pub/CPAN
5c5c2539 370 ftp://mirrors.hknet.com/CPAN
c165c82a 371
5df44211 372=item Indonesia
c165c82a 373
5c5c2539 374 http://mirrors.tf.itb.ac.id/cpan/
5df44211 375 http://cpan.cbn.net.id/
376 ftp://ftp.cbn.net.id/mirror/CPAN
c165c82a 377
5df44211 378=item Israel
c165c82a 379
5df44211 380 ftp://ftp.iglu.org.il/pub/CPAN/
381 http://cpan.lerner.co.il/
382 http://bioinfo.weizmann.ac.il/pub/software/perl/CPAN/
383 ftp://bioinfo.weizmann.ac.il/pub/software/perl/CPAN/
c165c82a 384
5df44211 385=item Japan
c165c82a 386
5df44211 387 ftp://ftp.u-aizu.ac.jp/pub/CPAN
388 ftp://ftp.kddlabs.co.jp/CPAN/
5df44211 389 ftp://ftp.ayamura.org/pub/CPAN/
390 ftp://ftp.jaist.ac.jp/pub/lang/perl/CPAN/
7a142657 391 http://ftp.cpan.jp/
392 ftp://ftp.cpan.jp/CPAN/
5df44211 393 ftp://ftp.dti.ad.jp/pub/lang/CPAN/
394 ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/
c165c82a 395
5c5c2539 396=item Malaysia
c165c82a 397
5c5c2539 398 http://cpan.MyBSD.org.my
399 http://mirror.leafbug.org/pub/CPAN
400 http://ossig.mncc.com.my/mirror/pub/CPAN
4e860d0a 401
5df44211 402=item Russian Federation
4e860d0a 403
5df44211 404 http://cpan.tomsk.ru
7a142657 405 ftp://cpan.tomsk.ru/
4e860d0a 406
5df44211 407=item Saudi Arabia
4e860d0a 408
5df44211 409 ftp://ftp.isu.net.sa/pub/CPAN/
4e860d0a 410
5df44211 411=item Singapore
4e860d0a 412
5c5c2539 413 http://CPAN.en.com.sg/
414 ftp://cpan.en.com.sg/
5df44211 415 http://mirror.averse.net/pub/CPAN
416 ftp://mirror.averse.net/pub/CPAN
5c5c2539 417 http://cpan.oss.eznetsols.org
418 ftp://ftp.oss.eznetsols.org/cpan
4e860d0a 419
5df44211 420=item South Korea
4e860d0a 421
5df44211 422 http://CPAN.bora.net/
423 ftp://ftp.bora.net/pub/CPAN/
5c5c2539 424 http://mirror.kr.FreeBSD.org/CPAN
425 ftp://ftp.kr.FreeBSD.org/pub/CPAN
4e860d0a 426
5df44211 427=item Taiwan
4e860d0a 428
5df44211 429 ftp://ftp.nctu.edu.tw/UNIX/perl/CPAN
5c5c2539 430 http://cpan.cdpa.nsysu.edu.tw/
431 ftp://cpan.cdpa.nsysu.edu.tw/pub/CPAN
432 http://ftp.isu.edu.tw/pub/CPAN
433 ftp://ftp.isu.edu.tw/pub/CPAN
5df44211 434 ftp://ftp1.sinica.edu.tw/pub1/perl/CPAN/
435 http://ftp.tku.edu.tw/pub/CPAN/
436 ftp://ftp.tku.edu.tw/pub/CPAN/
7a142657 437
5df44211 438=item Thailand
4e860d0a 439
5df44211 440 ftp://ftp.loxinfo.co.th/pub/cpan/
441 ftp://ftp.cs.riubon.ac.th/pub/mirrors/CPAN/
4e860d0a 442
443=back
444
445=head2 Central America
446
447=over 4
448
5df44211 449=item Costa Rica
4e860d0a 450
5df44211 451 http://ftp.ucr.ac.cr/Unix/CPAN/
452 ftp://ftp.ucr.ac.cr/pub/Unix/CPAN/
4e860d0a 453
454=back
455
456=head2 Europe
457
458=over 4
459
5df44211 460=item Austria
4e860d0a 461
2e75584a 462 http://cpan.inode.at/
463 ftp://cpan.inode.at
5df44211 464 ftp://ftp.tuwien.ac.at/pub/CPAN/
4e860d0a 465
5df44211 466=item Belgium
4e860d0a 467
5df44211 468 http://ftp.easynet.be/pub/CPAN/
469 ftp://ftp.easynet.be/pub/CPAN/
470 http://cpan.skynet.be
5c5c2539 471 ftp://ftp.cpan.skynet.be/pub/CPAN
5df44211 472 ftp://ftp.kulnet.kuleuven.ac.be/pub/mirror/CPAN/
4e860d0a 473
7a142657 474=item Bosnia and Herzegovina
475
476 http://cpan.blic.net/
477
5df44211 478=item Bulgaria
4e860d0a 479
5c5c2539 480 http://cpan.online.bg
481 ftp://cpan.online.bg/cpan
482 http://cpan.zadnik.org
483 ftp://ftp.zadnik.org/mirrors/CPAN/
5df44211 484 http://cpan.lirex.net/
485 ftp://ftp.lirex.net/pub/mirrors/CPAN
4e860d0a 486
5df44211 487=item Croatia
4e860d0a 488
5df44211 489 http://ftp.linux.hr/pub/CPAN/
490 ftp://ftp.linux.hr/pub/CPAN/
4e860d0a 491
5df44211 492=item Czech Republic
4e860d0a 493
5df44211 494 ftp://ftp.fi.muni.cz/pub/CPAN/
495 ftp://sunsite.mff.cuni.cz/MIRRORS/ftp.funet.fi/pub/languages/perl/CPAN/
4e860d0a 496
5df44211 497=item Denmark
4e860d0a 498
5df44211 499 http://mirrors.sunsite.dk/cpan/
500 ftp://sunsite.dk/mirrors/cpan/
501 http://cpan.cybercity.dk
502 http://www.cpan.dk/CPAN/
503 ftp://www.cpan.dk/ftp.cpan.org/CPAN/
4e860d0a 504
5df44211 505=item Estonia
4e860d0a 506
5df44211 507 ftp://ftp.ut.ee/pub/languages/perl/CPAN/
4e860d0a 508
5df44211 509=item Finland
4e860d0a 510
5df44211 511 ftp://ftp.funet.fi/pub/languages/perl/CPAN/
5c5c2539 512 http://mirror.eunet.fi/CPAN
4e860d0a 513
5df44211 514=item France
c165c82a 515
5c5c2539 516 http://www.enstimac.fr/Perl/CPAN
5df44211 517 http://ftp.u-paris10.fr/perl/CPAN
518 ftp://ftp.u-paris10.fr/perl/CPAN
519 http://cpan.mirrors.easynet.fr/
520 ftp://cpan.mirrors.easynet.fr/pub/ftp.cpan.org/
521 ftp://ftp.club-internet.fr/pub/perl/CPAN/
522 http://fr.cpan.org/
523 ftp://ftp.lip6.fr/pub/perl/CPAN/
524 ftp://ftp.oleane.net/pub/mirrors/CPAN/
525 ftp://ftp.pasteur.fr/pub/computing/CPAN/
526 http://mir2.ovh.net/ftp.cpan.org
527 ftp://mir1.ovh.net/ftp.cpan.org
5c5c2539 528 http://ftp.crihan.fr/mirrors/ftp.cpan.org/
529 ftp://ftp.crihan.fr/mirrors/ftp.cpan.org/
5df44211 530 http://ftp.u-strasbg.fr/CPAN
531 ftp://ftp.u-strasbg.fr/CPAN
5df44211 532 ftp://cpan.cict.fr/pub/CPAN/
533 ftp://ftp.uvsq.fr/pub/perl/CPAN/
c165c82a 534
5df44211 535=item Germany
c165c82a 536
5c5c2539 537 ftp://ftp.rub.de/pub/CPAN/
5df44211 538 ftp://ftp.freenet.de/pub/ftp.cpan.org/pub/CPAN/
539 ftp://ftp.uni-erlangen.de/pub/source/CPAN/
540 ftp://ftp-stud.fht-esslingen.de/pub/Mirrors/CPAN
541 http://pandemonium.tiscali.de/pub/CPAN/
542 ftp://pandemonium.tiscali.de/pub/CPAN/
543 http://ftp.gwdg.de/pub/languages/perl/CPAN/
544 ftp://ftp.gwdg.de/pub/languages/perl/CPAN/
545 ftp://ftp.uni-hamburg.de/pub/soft/lang/perl/CPAN/
546 ftp://ftp.leo.org/pub/CPAN/
547 http://cpan.noris.de/
548 ftp://cpan.noris.de/pub/CPAN/
549 ftp://ftp.mpi-sb.mpg.de/pub/perl/CPAN/
550 ftp://ftp.gmd.de/mirrors/CPAN/
4e860d0a 551
5df44211 552=item Greece
4e860d0a 553
5c5c2539 554 ftp://ftp.acn.gr/pub/lang/perl
5df44211 555 ftp://ftp.forthnet.gr/pub/languages/perl/CPAN
556 ftp://ftp.ntua.gr/pub/lang/perl/
4e860d0a 557
5df44211 558=item Hungary
4e860d0a 559
5df44211 560 http://ftp.kfki.hu/packages/perl/CPAN/
561 ftp://ftp.kfki.hu/pub/packages/perl/CPAN/
4e860d0a 562
5df44211 563=item Iceland
4e860d0a 564
5df44211 565 http://ftp.rhnet.is/pub/CPAN/
566 ftp://ftp.rhnet.is/pub/CPAN/
4e860d0a 567
5df44211 568=item Ireland
4e860d0a 569
5df44211 570 http://cpan.indigo.ie/
571 ftp://cpan.indigo.ie/pub/CPAN/
5c5c2539 572 http://ftp.heanet.ie/mirrors/ftp.perl.org/pub/CPAN
573 ftp://ftp.heanet.ie/mirrors/ftp.perl.org/pub/CPAN
5df44211 574 http://sunsite.compapp.dcu.ie/pub/perl/
575 ftp://sunsite.compapp.dcu.ie/pub/perl/
4e860d0a 576
5df44211 577=item Italy
4e860d0a 578
5df44211 579 http://cpan.nettuno.it/
580 http://gusp.dyndns.org/CPAN/
581 ftp://gusp.dyndns.org/pub/CPAN
582 http://softcity.iol.it/cpan
583 ftp://softcity.iol.it/pub/cpan
584 ftp://ftp.unina.it/pub/Other/CPAN/CPAN/
585 ftp://ftp.unipi.it/pub/mirror/perl/CPAN/
586 ftp://cis.uniRoma2.it/CPAN/
587 ftp://ftp.edisontel.it/pub/CPAN_Mirror/
5c5c2539 588 http://cpan.flashnet.it/
5df44211 589 ftp://ftp.flashnet.it/pub/CPAN/
4e860d0a 590
5df44211 591=item Latvia
4e860d0a 592
5df44211 593 http://kvin.lv/pub/CPAN/
4e860d0a 594
5df44211 595=item Lithuania
4e860d0a 596
5df44211 597 ftp://ftp.unix.lt/pub/CPAN/
4e860d0a 598
5df44211 599=item Netherlands
4e860d0a 600
5df44211 601 ftp://download.xs4all.nl/pub/mirror/CPAN/
602 ftp://ftp.nl.uu.net/pub/CPAN/
603 ftp://ftp.nluug.nl/pub/languages/perl/CPAN/
604 http://cpan.cybercomm.nl/
605 ftp://mirror.cybercomm.nl/pub/CPAN
5c5c2539 606 ftp://mirror.vuurwerk.nl/pub/CPAN/
5df44211 607 ftp://ftp.cpan.nl/pub/CPAN/
608 http://ftp.easynet.nl/mirror/CPAN
609 ftp://ftp.easynet.nl/mirror/CPAN
610 http://archive.cs.uu.nl/mirror/CPAN/
611 ftp://ftp.cs.uu.nl/mirror/CPAN/
4e860d0a 612
5df44211 613=item Norway
614
615 ftp://ftp.uninett.no/pub/languages/perl/CPAN
616 ftp://ftp.uit.no/pub/languages/perl/cpan/
617
618=item Poland
619
2e75584a 620 ftp://ftp.mega.net.pl/CPAN
5df44211 621 ftp://ftp.man.torun.pl/pub/doc/CPAN/
622 ftp://sunsite.icm.edu.pl/pub/CPAN/
623
624=item Portugal
625
626 ftp://ftp.ua.pt/pub/CPAN/
627 ftp://perl.di.uminho.pt/pub/CPAN/
628 http://cpan.dei.uc.pt/
629 ftp://ftp.dei.uc.pt/pub/CPAN
5c5c2539 630 ftp://ftp.nfsi.pt/pub/CPAN
631 http://ftp.linux.pt/pub/mirrors/CPAN
632 ftp://ftp.linux.pt/pub/mirrors/CPAN
5df44211 633 http://cpan.ip.pt/
634 ftp://cpan.ip.pt/pub/cpan/
5c5c2539 635 http://cpan.telepac.pt/
636 ftp://ftp.telepac.pt/pub/cpan/
4e860d0a 637
5df44211 638=item Romania
4e860d0a 639
5c5c2539 640 ftp://ftp.bio-net.ro/pub/CPAN
5df44211 641 ftp://ftp.kappa.ro/pub/mirrors/ftp.perl.org/pub/CPAN/
7a142657 642 ftp://ftp.lug.ro/CPAN
5c5c2539 643 ftp://ftp.roedu.net/pub/CPAN/
5df44211 644 ftp://ftp.dntis.ro/pub/cpan/
5c5c2539 645 ftp://ftp.iasi.roedu.net/pub/mirrors/ftp.cpan.org/
646 http://cpan.ambra.ro/
647 ftp://ftp.ambra.ro/pub/CPAN
5df44211 648 ftp://ftp.dnttm.ro/pub/CPAN/
649 ftp://ftp.lasting.ro/pub/CPAN
650 ftp://ftp.timisoara.roedu.net/mirrors/CPAN/
4e860d0a 651
5df44211 652=item Russia
4e860d0a 653
5df44211 654 ftp://ftp.chg.ru/pub/lang/perl/CPAN/
655 http://cpan.rinet.ru/
656 ftp://cpan.rinet.ru/pub/mirror/CPAN/
657 ftp://ftp.aha.ru/pub/CPAN/
7a142657 658 ftp://ftp.corbina.ru/pub/CPAN/
5df44211 659 http://cpan.sai.msu.ru/
660 ftp://ftp.sai.msu.su/pub/lang/perl/CPAN/
4e860d0a 661
5df44211 662=item Slovakia
4e860d0a 663
5df44211 664 ftp://ftp.cvt.stuba.sk/pub/CPAN/
4e860d0a 665
5df44211 666=item Slovenia
4e860d0a 667
5df44211 668 ftp://ftp.arnes.si/software/perl/CPAN/
4e860d0a 669
5df44211 670=item Spain
4e860d0a 671
5df44211 672 http://cpan.imasd.elmundo.es/
673 ftp://ftp.rediris.es/mirror/CPAN/
2e75584a 674 ftp://ftp.ri.telefonica-data.net/CPAN
5df44211 675 ftp://ftp.etse.urv.es/pub/perl/
4e860d0a 676
5df44211 677=item Sweden
4e860d0a 678
5df44211 679 http://ftp.du.se/CPAN/
680 ftp://ftp.du.se/pub/CPAN/
5c5c2539 681 http://mirror.dataphone.se/CPAN
5df44211 682 ftp://mirror.dataphone.se/pub/CPAN
683 ftp://ftp.sunet.se/pub/lang/perl/CPAN/
4e860d0a 684
5df44211 685=item Switzerland
4e860d0a 686
7a142657 687 http://cpan.mirror.solnet.ch/
688 ftp://ftp.solnet.ch/mirror/CPAN/
5df44211 689 ftp://ftp.danyk.ch/CPAN/
690 ftp://sunsite.cnlab-switch.ch/mirror/CPAN/
4e860d0a 691
5df44211 692=item Turkey
4e860d0a 693
5df44211 694 http://ftp.ulak.net.tr/perl/CPAN/
695 ftp://ftp.ulak.net.tr/perl/CPAN
696 ftp://sunsite.bilkent.edu.tr/pub/languages/CPAN/
c165c82a 697
5df44211 698=item Ukraine
c165c82a 699
5df44211 700 http://cpan.org.ua/
701 ftp://cpan.org.ua/
702 ftp://ftp.perl.org.ua/pub/CPAN/
5c5c2539 703 http://no-more.kiev.ua/CPAN/
704 ftp://no-more.kiev.ua/pub/CPAN/
c165c82a 705
5df44211 706=item United Kingdom
d4858812 707
5df44211 708 http://www.mirror.ac.uk/sites/ftp.funet.fi/pub/languages/perl/CPAN
709 ftp://ftp.mirror.ac.uk/sites/ftp.funet.fi/pub/languages/perl/CPAN/
710 http://cpan.teleglobe.net/
711 ftp://cpan.teleglobe.net/pub/CPAN
5c5c2539 712 http://cpan.mirror.anlx.net/
713 ftp://ftp.mirror.anlx.net/CPAN/
7a142657 714 http://cpan.etla.org/
715 ftp://cpan.etla.org/pub/CPAN
5df44211 716 ftp://ftp.demon.co.uk/pub/CPAN/
717 http://cpan.m.flirble.org/
718 ftp://ftp.flirble.org/pub/languages/perl/CPAN/
719 ftp://ftp.plig.org/pub/CPAN/
5c5c2539 720 http://cpan.hambule.co.uk/
5df44211 721 http://cpan.mirrors.clockerz.net/
722 ftp://ftp.clockerz.net/pub/CPAN/
723 ftp://usit.shef.ac.uk/pub/packages/CPAN/
d4858812 724
4e860d0a 725=back
726
727=head2 North America
728
729=over 4
730
5c5c2539 731=item Canada
732
7a142657 733=over 8
5c5c2539 734
5df44211 735=item Alberta
4e860d0a 736
5c5c2539 737 http://cpan.sunsite.ualberta.ca/
738 ftp://cpan.sunsite.ualberta.ca/pub/CPAN/
4e860d0a 739
5df44211 740=item Manitoba
4e860d0a 741
5df44211 742 http://theoryx5.uwinnipeg.ca/pub/CPAN/
743 ftp://theoryx5.uwinnipeg.ca/pub/CPAN/
4e860d0a 744
5df44211 745=item Nova Scotia
4e860d0a 746
5df44211 747 ftp://cpan.chebucto.ns.ca/pub/CPAN/
4e860d0a 748
5df44211 749=item Ontario
4e860d0a 750
5c5c2539 751 ftp://ftp.nrc.ca/pub/CPAN/
c165c82a 752
7a142657 753=back
754
5df44211 755=item Mexico
c165c82a 756
5df44211 757 http://cpan.azc.uam.mx
758 ftp://cpan.azc.uam.mx/mirrors/CPAN
7a142657 759 http://www.cpan.unam.mx/
760 ftp://ftp.unam.mx/pub/CPAN
5df44211 761 http://www.msg.com.mx/CPAN/
762 ftp://ftp.msg.com.mx/pub/CPAN/
c165c82a 763
5c5c2539 764=item United States
d4858812 765
7a142657 766=over 8
4e860d0a 767
5df44211 768=item Alabama
4e860d0a 769
5df44211 770 http://mirror.hiwaay.net/CPAN/
771 ftp://mirror.hiwaay.net/CPAN/
4e860d0a 772
5df44211 773=item California
4e860d0a 774
5df44211 775 http://cpan.develooper.com/
776 http://www.cpan.org/
777 ftp://cpan.valueclick.com/pub/CPAN/
7a142657 778 http://www.mednor.net/ftp/pub/mirrors/CPAN/
779 ftp://ftp.mednor.net/pub/mirrors/CPAN/
5df44211 780 http://mirrors.gossamer-threads.com/CPAN
781 ftp://cpan.nas.nasa.gov/pub/perl/CPAN/
782 http://mirrors.kernel.org/cpan/
783 ftp://mirrors.kernel.org/pub/CPAN
7a142657 784 http://cpan-sj.viaverio.com/
785 ftp://cpan-sj.viaverio.com/pub/CPAN/
5df44211 786 http://cpan.digisle.net/
787 ftp://cpan.digisle.net/pub/CPAN
788 http://www.perl.com/CPAN/
7a142657 789 http://www.uberlan.net/CPAN
4e860d0a 790
5df44211 791=item Colorado
4e860d0a 792
5df44211 793 ftp://ftp.cs.colorado.edu/pub/perl/CPAN/
7a142657 794 http://cpan.four10.com
4e860d0a 795
5df44211 796=item Delaware
4e860d0a 797
5df44211 798 http://ftp.lug.udel.edu/pub/CPAN
799 ftp://ftp.lug.udel.edu/pub/CPAN
4e860d0a 800
5df44211 801=item District of Columbia
4e860d0a 802
5df44211 803 ftp://ftp.dc.aleron.net/pub/CPAN/
4e860d0a 804
5df44211 805=item Florida
c165c82a 806
5df44211 807 ftp://ftp.cise.ufl.edu/pub/mirrors/CPAN/
808 http://mirror.csit.fsu.edu/pub/CPAN/
809 ftp://mirror.csit.fsu.edu/pub/CPAN/
810 http://cpan.mirrors.nks.net/
c165c82a 811
5df44211 812=item Indiana
4e860d0a 813
5df44211 814 ftp://ftp.uwsg.iu.edu/pub/perl/CPAN/
815 http://cpan.netnitco.net/
816 ftp://cpan.netnitco.net/pub/mirrors/CPAN/
817 http://archive.progeny.com/CPAN/
818 ftp://archive.progeny.com/CPAN/
5c5c2539 819 http://fx.saintjoe.edu/pub/CPAN
820 ftp://ftp.saintjoe.edu/pub/CPAN
5df44211 821 http://csociety-ftp.ecn.purdue.edu/pub/CPAN
822 ftp://csociety-ftp.ecn.purdue.edu/pub/CPAN
4e860d0a 823
5df44211 824=item Kentucky
4e860d0a 825
5df44211 826 http://cpan.uky.edu/
827 ftp://cpan.uky.edu/pub/CPAN/
5c5c2539 828 http://slugsite.louisville.edu/cpan
829 ftp://slugsite.louisville.edu/CPAN
4e860d0a 830
5df44211 831=item Massachusetts
4e860d0a 832
5c5c2539 833 http://mirrors.towardex.com/CPAN
834 ftp://mirrors.towardex.com/pub/CPAN
5df44211 835 ftp://ftp.ccs.neu.edu/net/mirrors/ftp.funet.fi/pub/languages/perl/CPAN/
4e860d0a 836
5df44211 837=item Michigan
4e860d0a 838
5df44211 839 ftp://cpan.cse.msu.edu/
2e75584a 840 http://cpan.calvin.edu/pub/CPAN
841 ftp://cpan.calvin.edu/pub/CPAN
4e860d0a 842
5c5c2539 843=item Nevada
844
845 http://www.oss.redundant.com/pub/CPAN
846 ftp://www.oss.redundant.com/pub/CPAN
847
5df44211 848=item New Jersey
4e860d0a 849
5c5c2539 850 http://ftp.cpanel.net/pub/CPAN/
5df44211 851 ftp://ftp.cpanel.net/pub/CPAN/
852 http://cpan.teleglobe.net/
853 ftp://cpan.teleglobe.net/pub/CPAN
4e860d0a 854
5df44211 855=item New York
4e860d0a 856
5df44211 857 http://cpan.belfry.net/
5c5c2539 858 http://cpan.erlbaum.net/
859 ftp://cpan.erlbaum.net/
5df44211 860 http://cpan.thepirtgroup.com/
861 ftp://cpan.thepirtgroup.com/
862 ftp://ftp.stealth.net/pub/CPAN/
863 http://www.rge.com/pub/languages/perl/
864 ftp://ftp.rge.com/pub/languages/perl/
4e860d0a 865
5df44211 866=item North Carolina
4e860d0a 867
7a142657 868 http://www.ibiblio.org/pub/languages/perl/CPAN
869 ftp://ftp.ibiblio.org/pub/languages/perl/CPAN
5df44211 870 ftp://ftp.duke.edu/pub/perl/
5c5c2539 871 ftp://ftp.ncsu.edu/pub/mirror/CPAN/
4e860d0a 872
5df44211 873=item Oklahoma
4e860d0a 874
5df44211 875 ftp://ftp.ou.edu/mirrors/CPAN/
4e860d0a 876
5df44211 877=item Oregon
4e860d0a 878
5df44211 879 ftp://ftp.orst.edu/pub/CPAN
4e860d0a 880
5df44211 881=item Pennsylvania
4e860d0a 882
5df44211 883 http://ftp.epix.net/CPAN/
884 ftp://ftp.epix.net/pub/languages/perl/
885 http://mirrors.phenominet.com/pub/CPAN/
886 ftp://mirrors.phenominet.com/pub/CPAN/
887 http://cpan.pair.com/
888 ftp://cpan.pair.com/pub/CPAN/
889 ftp://carroll.cac.psu.edu/pub/CPAN/
4e860d0a 890
5df44211 891=item Tennessee
4e860d0a 892
5df44211 893 ftp://ftp.sunsite.utk.edu/pub/CPAN/
4e860d0a 894
5df44211 895=item Texas
4e860d0a 896
5df44211 897 http://ftp.sedl.org/pub/mirrors/CPAN/
5c5c2539 898 http://www.binarycode.org/cpan
5df44211 899 ftp://mirror.telentente.com/pub/CPAN
5c5c2539 900 http://mirrors.theonlinerecordstore.com/CPAN
4e860d0a 901
5df44211 902=item Utah
4e860d0a 903
5df44211 904 ftp://mirror.xmission.com/CPAN/
4e860d0a 905
5df44211 906=item Virginia
4e860d0a 907
7a142657 908 http://cpan-du.viaverio.com/
909 ftp://cpan-du.viaverio.com/pub/CPAN/
5df44211 910 http://mirrors.rcn.net/pub/lang/CPAN/
911 ftp://mirrors.rcn.net/pub/lang/CPAN/
912 http://perl.secsup.org/
913 ftp://perl.secsup.org/pub/perl/
5c5c2539 914 http://noc.cvaix.com/mirrors/CPAN/
4e860d0a 915
5c5c2539 916=item Washington
4e860d0a 917
5df44211 918 http://cpan.llarian.net/
919 ftp://cpan.llarian.net/pub/CPAN/
920 http://cpan.mirrorcentral.com/
921 ftp://ftp.mirrorcentral.com/pub/CPAN/
922 ftp://ftp-mirror.internap.com/pub/CPAN/
d4858812 923
5df44211 924=item Wisconsin
d4858812 925
5df44211 926 http://mirror.sit.wisc.edu/pub/CPAN/
927 ftp://mirror.sit.wisc.edu/pub/CPAN/
7a142657 928 http://mirror.aphix.com/CPAN
929 ftp://mirror.aphix.com/pub/CPAN
4e860d0a 930
931=back
932
5c5c2539 933=back
934
4e860d0a 935=head2 Oceania
936
937=over 4
938
5df44211 939=item Australia
4e860d0a 940
5df44211 941 http://ftp.planetmirror.com/pub/CPAN/
942 ftp://ftp.planetmirror.com/pub/CPAN/
943 ftp://mirror.aarnet.edu.au/pub/perl/CPAN/
944 ftp://cpan.topend.com.au/pub/CPAN/
7a142657 945 http://cpan.mirrors.ilisys.com.au
4e860d0a 946
5df44211 947=item New Zealand
d4858812 948
5df44211 949 ftp://ftp.auckland.ac.nz/pub/perl/CPAN/
5c5c2539 950
951=item United States
952
953 http://aniani.ifa.hawaii.edu/CPAN/
954 ftp://aniani.ifa.hawaii.edu/CPAN/
4e860d0a 955
956=back
957
958=head2 South America
959
960=over 4
961
5df44211 962=item Argentina
4e860d0a 963
5df44211 964 ftp://mirrors.bannerlandia.com.ar/mirrors/CPAN/
5c5c2539 965 http://www.linux.org.ar/mirrors/cpan
966 ftp://ftp.linux.org.ar/mirrors/cpan
4e860d0a 967
5df44211 968=item Brazil
4e860d0a 969
5df44211 970 ftp://cpan.pop-mg.com.br/pub/CPAN/
971 ftp://ftp.matrix.com.br/pub/perl/CPAN/
5c5c2539 972 http://cpan.hostsul.com.br/
973 ftp://cpan.hostsul.com.br/
4e860d0a 974
5df44211 975=item Chile
4e860d0a 976
5df44211 977 http://cpan.netglobalis.net/
978 ftp://cpan.netglobalis.net/pub/CPAN/
2e1d04bc 979
980=back
981
5df44211 982=head2 RSYNC Mirrors
983
7a142657 984 www.linux.org.ar::cpan
985 theoryx5.uwinnipeg.ca::CPAN
986 ftp.shellhung.org::CPAN
987 rsync.nic.funet.fi::CPAN
988 ftp.u-paris10.fr::CPAN
989 mir1.ovh.net::CPAN
990 rsync://ftp.crihan.fr::CPAN
991 ftp.gwdg.de::FTP/languages/perl/CPAN/
992 ftp.leo.org::CPAN
993 ftp.cbn.net.id::CPAN
994 rsync://ftp.heanet.ie/mirrors/ftp.perl.org/pub/CPAN
995 ftp.iglu.org.il::CPAN
996 gusp.dyndns.org::cpan
997 ftp.kddlabs.co.jp::cpan
998 ftp.ayamura.org::pub/CPAN/
999 mirror.leafbug.org::CPAN
1000 rsync.en.com.sg::CPAN
1001 mirror.averse.net::cpan
1002 rsync.oss.eznetsols.org
1003 ftp.kr.FreeBSD.org::CPAN
1004 ftp.solnet.ch::CPAN
1005 cpan.cdpa.nsysu.edu.tw::CPAN
1006 cpan.teleglobe.net::CPAN
1007 rsync://rsync.mirror.anlx.net::CPAN
1008 ftp.sedl.org::cpan
1009 ibiblio.org::CPAN
1010 cpan-du.viaverio.com::CPAN
1011 aniani.ifa.hawaii.edu::CPAN
1012 archive.progeny.com::CPAN
1013 rsync://slugsite.louisville.edu::CPAN
1014 mirror.aphix.com::CPAN
1015 cpan.teleglobe.net::CPAN
1016 ftp.lug.udel.edu::cpan
1017 mirrors.kernel.org::mirrors/CPAN
1018 mirrors.phenominet.com::CPAN
1019 cpan.pair.com::CPAN
1020 cpan-sj.viaverio.com::CPAN
1021 mirror.csit.fsu.edu::CPAN
1022 csociety-ftp.ecn.purdue.edu::CPAN
5df44211 1023
2e1d04bc 1024For an up-to-date listing of CPAN sites,
4e860d0a 1025see http://www.cpan.org/SITES or ftp://www.cpan.org/SITES .
2e1d04bc 1026
1027=head1 Modules: Creation, Use, and Abuse
1028
1029(The following section is borrowed directly from Tim Bunce's modules
1030file, available at your nearest CPAN site.)
1031
1032Perl implements a class using a package, but the presence of a
1033package doesn't imply the presence of a class. A package is just a
1034namespace. A class is a package that provides subroutines that can be
1035used as methods. A method is just a subroutine that expects, as its
1036first argument, either the name of a package (for "static" methods),
1037or a reference to something (for "virtual" methods).
1038
1039A module is a file that (by convention) provides a class of the same
1040name (sans the .pm), plus an import method in that class that can be
1041called to fetch exported symbols. This module may implement some of
1042its methods by loading dynamic C or C++ objects, but that should be
1043totally transparent to the user of the module. Likewise, the module
1044might set up an AUTOLOAD function to slurp in subroutine definitions on
1045demand, but this is also transparent. Only the F<.pm> file is required to
1046exist. See L<perlsub>, L<perltoot>, and L<AutoLoader> for details about
1047the AUTOLOAD mechanism.
1048
1049=head2 Guidelines for Module Creation
1050
1051=over 4
1052
ac634a9a 1053=item *
1054
1055Do similar modules already exist in some form?
2e1d04bc 1056
1057If so, please try to reuse the existing modules either in whole or
1058by inheriting useful features into a new class. If this is not
1059practical try to get together with the module authors to work on
1060extending or enhancing the functionality of the existing modules.
1061A perfect example is the plethora of packages in perl4 for dealing
1062with command line options.
1063
1064If you are writing a module to expand an already existing set of
1065modules, please coordinate with the author of the package. It
1066helps if you follow the same naming scheme and module interaction
1067scheme as the original author.
1068
ac634a9a 1069=item *
1070
1071Try to design the new module to be easy to extend and reuse.
2e1d04bc 1072
1073Try to C<use warnings;> (or C<use warnings qw(...);>).
1074Remember that you can add C<no warnings qw(...);> to individual blocks
1075of code that need less warnings.
1076
1077Use blessed references. Use the two argument form of bless to bless
1078into the class name given as the first parameter of the constructor,
1079e.g.,:
1080
1081 sub new {
1082 my $class = shift;
1083 return bless {}, $class;
1084 }
1085
1086or even this if you'd like it to be used as either a static
1087or a virtual method.
1088
1089 sub new {
1090 my $self = shift;
1091 my $class = ref($self) || $self;
1092 return bless {}, $class;
1093 }
1094
1095Pass arrays as references so more parameters can be added later
1096(it's also faster). Convert functions into methods where
1097appropriate. Split large methods into smaller more flexible ones.
1098Inherit methods from other modules if appropriate.
1099
1100Avoid class name tests like: C<die "Invalid" unless ref $ref eq 'FOO'>.
1101Generally you can delete the C<eq 'FOO'> part with no harm at all.
1102Let the objects look after themselves! Generally, avoid hard-wired
1103class names as far as possible.
1104
1105Avoid C<< $r->Class::func() >> where using C<@ISA=qw(... Class ...)> and
1106C<< $r->func() >> would work (see L<perlbot> for more details).
1107
1108Use autosplit so little used or newly added functions won't be a
1109burden to programs that don't use them. Add test functions to
1110the module after __END__ either using AutoSplit or by saying:
1111
1112 eval join('',<main::DATA>) || die $@ unless caller();
1113
1114Does your module pass the 'empty subclass' test? If you say
1115C<@SUBCLASS::ISA = qw(YOURCLASS);> your applications should be able
1116to use SUBCLASS in exactly the same way as YOURCLASS. For example,
63acfd00 1117does your application still work if you change: C<< $obj = YOURCLASS->new(); >>
1118into: C<< $obj = SUBCLASS->new(); >> ?
2e1d04bc 1119
1120Avoid keeping any state information in your packages. It makes it
1121difficult for multiple other packages to use yours. Keep state
1122information in objects.
1123
1124Always use B<-w>.
1125
1126Try to C<use strict;> (or C<use strict qw(...);>).
1127Remember that you can add C<no strict qw(...);> to individual blocks
1128of code that need less strictness.
1129
1130Always use B<-w>.
1131
1132Follow the guidelines in the perlstyle(1) manual.
1133
1134Always use B<-w>.
1135
ac634a9a 1136=item *
1137
1138Some simple style guidelines
2e1d04bc 1139
1140The perlstyle manual supplied with Perl has many helpful points.
1141
1142Coding style is a matter of personal taste. Many people evolve their
1143style over several years as they learn what helps them write and
1144maintain good code. Here's one set of assorted suggestions that
1145seem to be widely used by experienced developers:
1146
1147Use underscores to separate words. It is generally easier to read
1148$var_names_like_this than $VarNamesLikeThis, especially for
1149non-native speakers of English. It's also a simple rule that works
1150consistently with VAR_NAMES_LIKE_THIS.
1151
1152Package/Module names are an exception to this rule. Perl informally
1153reserves lowercase module names for 'pragma' modules like integer
1154and strict. Other modules normally begin with a capital letter and
1155use mixed case with no underscores (need to be short and portable).
1156
1157You may find it helpful to use letter case to indicate the scope
1158or nature of a variable. For example:
1159
1160 $ALL_CAPS_HERE constants only (beware clashes with Perl vars)
1161 $Some_Caps_Here package-wide global/static
1162 $no_caps_here function scope my() or local() variables
1163
1164Function and method names seem to work best as all lowercase.
1165e.g., C<< $obj->as_string() >>.
1166
1167You can use a leading underscore to indicate that a variable or
1168function should not be used outside the package that defined it.
1169
ac634a9a 1170=item *
1171
1172Select what to export.
2e1d04bc 1173
1174Do NOT export method names!
1175
1176Do NOT export anything else by default without a good reason!
1177
1178Exports pollute the namespace of the module user. If you must
1179export try to use @EXPORT_OK in preference to @EXPORT and avoid
1180short or common names to reduce the risk of name clashes.
1181
1182Generally anything not exported is still accessible from outside the
1183module using the ModuleName::item_name (or C<< $blessed_ref->method >>)
1184syntax. By convention you can use a leading underscore on names to
1185indicate informally that they are 'internal' and not for public use.
1186
1187(It is actually possible to get private functions by saying:
1188C<my $subref = sub { ... }; &$subref;>. But there's no way to call that
1189directly as a method, because a method must have a name in the symbol
1190table.)
1191
1192As a general rule, if the module is trying to be object oriented
1193then export nothing. If it's just a collection of functions then
1194@EXPORT_OK anything but use @EXPORT with caution.
1195
ac634a9a 1196=item *
1197
1198Select a name for the module.
2e1d04bc 1199
1200This name should be as descriptive, accurate, and complete as
1201possible. Avoid any risk of ambiguity. Always try to use two or
1202more whole words. Generally the name should reflect what is special
1203about what the module does rather than how it does it. Please use
1204nested module names to group informally or categorize a module.
1205There should be a very good reason for a module not to have a nested name.
1206Module names should begin with a capital letter.
1207
1208Having 57 modules all called Sort will not make life easy for anyone
1209(though having 23 called Sort::Quick is only marginally better :-).
1210Imagine someone trying to install your module alongside many others.
1211If in any doubt ask for suggestions in comp.lang.perl.misc.
1212
1213If you are developing a suite of related modules/classes it's good
1214practice to use nested classes with a common prefix as this will
1215avoid namespace clashes. For example: Xyz::Control, Xyz::View,
1216Xyz::Model etc. Use the modules in this list as a naming guide.
1217
1218If adding a new module to a set, follow the original author's
1219standards for naming modules and the interface to methods in
1220those modules.
1221
4844a3be 1222If developing modules for private internal or project specific use,
1223that will never be released to the public, then you should ensure
1224that their names will not clash with any future public module. You
1225can do this either by using the reserved Local::* category or by
1226using a category name that includes an underscore like Foo_Corp::*.
1227
2e1d04bc 1228To be portable each component of a module name should be limited to
122911 characters. If it might be used on MS-DOS then try to ensure each is
1230unique in the first 8 characters. Nested modules make this easier.
1231
ac634a9a 1232=item *
1233
1234Have you got it right?
2e1d04bc 1235
1236How do you know that you've made the right decisions? Have you
1237picked an interface design that will cause problems later? Have
1238you picked the most appropriate name? Do you have any questions?
1239
1240The best way to know for sure, and pick up many helpful suggestions,
1241is to ask someone who knows. Comp.lang.perl.misc is read by just about
1242all the people who develop modules and it's the best place to ask.
1243
1244All you need to do is post a short summary of the module, its
1245purpose and interfaces. A few lines on each of the main methods is
1246probably enough. (If you post the whole module it might be ignored
1247by busy people - generally the very people you want to read it!)
1248
1249Don't worry about posting if you can't say when the module will be
1250ready - just say so in the message. It might be worth inviting
1251others to help you, they may be able to complete it for you!
1252
ac634a9a 1253=item *
1254
1255README and other Additional Files.
2e1d04bc 1256
1257It's well known that software developers usually fully document the
1258software they write. If, however, the world is in urgent need of
1259your software and there is not enough time to write the full
1260documentation please at least provide a README file containing:
1261
1262=over 10
1263
1264=item *
ac634a9a 1265
2e1d04bc 1266A description of the module/package/extension etc.
1267
1268=item *
ac634a9a 1269
2e1d04bc 1270A copyright notice - see below.
1271
1272=item *
ac634a9a 1273
2e1d04bc 1274Prerequisites - what else you may need to have.
1275
1276=item *
ac634a9a 1277
2e1d04bc 1278How to build it - possible changes to Makefile.PL etc.
1279
1280=item *
ac634a9a 1281
2e1d04bc 1282How to install it.
1283
1284=item *
ac634a9a 1285
2e1d04bc 1286Recent changes in this release, especially incompatibilities
1287
1288=item *
ac634a9a 1289
2e1d04bc 1290Changes / enhancements you plan to make in the future.
1291
1292=back
1293
1294If the README file seems to be getting too large you may wish to
1295split out some of the sections into separate files: INSTALL,
1296Copying, ToDo etc.
1297
1298=over 4
1299
c165c82a 1300=item *
2e1d04bc 1301
c165c82a 1302Adding a Copyright Notice.
ac634a9a 1303
2e1d04bc 1304How you choose to license your work is a personal decision.
1305The general mechanism is to assert your Copyright and then make
1306a declaration of how others may copy/use/modify your work.
1307
2a551100 1308Perl, for example, is supplied with two types of licence: The GNU GPL
1309and The Artistic Licence (see the files README, Copying, and Artistic,
1310or L<perlgpl> and L<perlartistic>). Larry has good reasons for NOT
1311just using the GNU GPL.
2e1d04bc 1312
1313My personal recommendation, out of respect for Larry, Perl, and the
1314Perl community at large is to state something simply like:
1315
1316 Copyright (c) 1995 Your Name. All rights reserved.
1317 This program is free software; you can redistribute it and/or
1318 modify it under the same terms as Perl itself.
1319
1320This statement should at least appear in the README file. You may
1321also wish to include it in a Copying file and your source files.
1322Remember to include the other words in addition to the Copyright.
1323
ac634a9a 1324=item *
1325
1326Give the module a version/issue/release number.
2e1d04bc 1327
1328To be fully compatible with the Exporter and MakeMaker modules you
1329should store your module's version number in a non-my package
1330variable called $VERSION. This should be a floating point
1331number with at least two digits after the decimal (i.e., hundredths,
1332e.g, C<$VERSION = "0.01">). Don't use a "1.3.2" style version.
1333See L<Exporter> for details.
1334
1335It may be handy to add a function or method to retrieve the number.
1336Use the number in announcements and archive file names when
1337releasing the module (ModuleName-1.02.tar.Z).
1338See perldoc ExtUtils::MakeMaker.pm for details.
1339
ac634a9a 1340=item *
1341
1342How to release and distribute a module.
2e1d04bc 1343
1344It's good idea to post an announcement of the availability of your
1345module (or the module itself if small) to the comp.lang.perl.announce
1346Usenet newsgroup. This will at least ensure very wide once-off
1347distribution.
1348
1349If possible, register the module with CPAN. You should
1350include details of its location in your announcement.
1351
1352Some notes about ftp archives: Please use a long descriptive file
1353name that includes the version number. Most incoming directories
1354will not be readable/listable, i.e., you won't be able to see your
1355file after uploading it. Remember to send your email notification
1356message as soon as possible after uploading else your file may get
1357deleted automatically. Allow time for the file to be processed
1358and/or check the file has been processed before announcing its
1359location.
1360
1361FTP Archives for Perl Modules:
1362
1363Follow the instructions and links on:
1364
4e860d0a 1365 http://www.cpan.org/modules/00modlist.long.html
1366 http://www.cpan.org/modules/04pause.html
2e1d04bc 1367
1368or upload to one of these sites:
1369
1370 https://pause.kbx.de/pause/
1371 http://pause.perl.org/pause/
1372
1373and notify <modules@perl.org>.
1374
1375By using the WWW interface you can ask the Upload Server to mirror
1376your modules from your ftp or WWW site into your own directory on
1377CPAN!
1378
1379Please remember to send me an updated entry for the Module list!
1380
ac634a9a 1381=item *
1382
1383Take care when changing a released module.
2e1d04bc 1384
1385Always strive to remain compatible with previous released versions.
1386Otherwise try to add a mechanism to revert to the
1387old behavior if people rely on it. Document incompatible changes.
1388
1389=back
1390
1391=back
1392
1393=head2 Guidelines for Converting Perl 4 Library Scripts into Modules
1394
1395=over 4
1396
ac634a9a 1397=item *
1398
1399There is no requirement to convert anything.
2e1d04bc 1400
1401If it ain't broke, don't fix it! Perl 4 library scripts should
1402continue to work with no problems. You may need to make some minor
1403changes (like escaping non-array @'s in double quoted strings) but
1404there is no need to convert a .pl file into a Module for just that.
1405
ac634a9a 1406=item *
1407
1408Consider the implications.
2e1d04bc 1409
1410All Perl applications that make use of the script will need to
1411be changed (slightly) if the script is converted into a module. Is
1412it worth it unless you plan to make other changes at the same time?
1413
ac634a9a 1414=item *
1415
1416Make the most of the opportunity.
2e1d04bc 1417
1418If you are going to convert the script to a module you can use the
1419opportunity to redesign the interface. The guidelines for module
1420creation above include many of the issues you should consider.
1421
ac634a9a 1422=item *
1423
1424The pl2pm utility will get you started.
2e1d04bc 1425
1426This utility will read *.pl files (given as parameters) and write
1427corresponding *.pm files. The pl2pm utilities does the following:
1428
1429=over 10
1430
1431=item *
ac634a9a 1432
2e1d04bc 1433Adds the standard Module prologue lines
1434
1435=item *
ac634a9a 1436
2e1d04bc 1437Converts package specifiers from ' to ::
1438
1439=item *
ac634a9a 1440
2e1d04bc 1441Converts die(...) to croak(...)
1442
1443=item *
ac634a9a 1444
2e1d04bc 1445Several other minor changes
1446
1447=back
1448
1449Being a mechanical process pl2pm is not bullet proof. The converted
1450code will need careful checking, especially any package statements.
1451Don't delete the original .pl file till the new .pm one works!
1452
1453=back
1454
1455=head2 Guidelines for Reusing Application Code
1456
1457=over 4
1458
ac634a9a 1459=item *
1460
1461Complete applications rarely belong in the Perl Module Library.
1462
1463=item *
2e1d04bc 1464
ac634a9a 1465Many applications contain some Perl code that could be reused.
2e1d04bc 1466
1467Help save the world! Share your code in a form that makes it easy
1468to reuse.
1469
ac634a9a 1470=item *
1471
1472Break-out the reusable code into one or more separate module files.
1473
1474=item *
1475
1476Take the opportunity to reconsider and redesign the interfaces.
2e1d04bc 1477
ac634a9a 1478=item *
2e1d04bc 1479
ac634a9a 1480In some cases the 'application' can then be reduced to a small
2e1d04bc 1481
1482fragment of code built on top of the reusable modules. In these cases
1483the application could invoked as:
1484
1485 % perl -e 'use Module::Name; method(@ARGV)' ...
1486or
1487 % perl -mModule::Name ... (in perl5.002 or higher)
1488
1489=back
1490
1491=head1 NOTE
1492
1493Perl does not enforce private and public parts of its modules as you may
1494have been used to in other languages like C++, Ada, or Modula-17. Perl
1495doesn't have an infatuation with enforced privacy. It would prefer
1496that you stayed out of its living room because you weren't invited, not
1497because it has a shotgun.
1498
1499The module and its user have a contract, part of which is common law,
1500and part of which is "written". Part of the common law contract is
1501that a module doesn't pollute any namespace it wasn't asked to. The
1502written contract for the module (A.K.A. documentation) may make other
1503provisions. But then you know when you C<use RedefineTheWorld> that
1504you're redefining the world and willing to take the consequences.
1505EOF
1506
1507close MANIFEST or warn "$0: failed to close MANIFEST (../MANIFEST): $!";
b7da254d 1508close OUT or warn "$0: failed to close OUT (perlmodlib.pod): $!";
2e1d04bc 1509