Adding the new test would be swell.
[p5sagit/p5-mst-13.2.git] / pod / perlmodlib.pod
CommitLineData
4e860d0a 1# Generated by perlmodlib.PL DO NOT EDIT!
2
f102b883 3=head1 NAME
4
5perlmodlib - constructing new Perl modules and finding existing ones
6
7=head1 DESCRIPTION
8
9=head1 THE PERL MODULE LIBRARY
10
19799a22 11Many modules are included the Perl distribution. These are described
12below, and all end in F<.pm>. You may discover compiled library
13file (usually ending in F<.so>) or small pieces of modules to be
14autoloaded (ending in F<.al>); these were automatically generated
15by the installation process. You may also discover files in the
16library directory that end in either F<.pl> or F<.ph>. These are
17old libraries supplied so that old programs that use them still
18run. The F<.pl> files will all eventually be converted into standard
19modules, and the F<.ph> files made by B<h2ph> will probably end up
20as extension modules made by B<h2xs>. (Some F<.ph> values may
21already be available through the POSIX, Errno, or Fcntl modules.)
22The B<pl2pm> file in the distribution may help in your conversion,
23but it's just a mechanical process and therefore far from bulletproof.
f102b883 24
25=head2 Pragmatic Modules
26
19799a22 27They work somewhat like compiler directives (pragmata) in that they
28tend to affect the compilation of your program, and thus will usually
29work well only when used within a C<use>, or C<no>. Most of these
30are lexically scoped, so an inner BLOCK may countermand them
31by saying:
f102b883 32
33 no integer;
34 no strict 'refs';
4438c4b7 35 no warnings;
f102b883 36
37which lasts until the end of that BLOCK.
38
19799a22 39Some pragmas are lexically scoped--typically those that affect the
40C<$^H> hints variable. Others affect the current package instead,
77ca0c92 41like C<use vars> and C<use subs>, which allow you to predeclare a
19799a22 42variables or subroutines within a particular I<file> rather than
43just a block. Such declarations are effective for the entire file
44for which they were declared. You cannot rescind them with C<no
45vars> or C<no subs>.
f102b883 46
47The following pragmas are defined (and have their own documentation).
48
49=over 12
50
09bef843 51=item attributes
52
9e107c59 53Get/set subroutine or variable attributes
09bef843 54
19799a22 55=item attrs
f102b883 56
9e107c59 57Set/get attributes of a subroutine (deprecated)
19799a22 58
59=item autouse
60
9e107c59 61Postpone load of modules until a function is used
19799a22 62
63=item base
64
65Establish IS-A relationship with base class at compile time
f102b883 66
67=item blib
68
19799a22 69Use MakeMaker's uninstalled version of a package
70
2e1d04bc 71=item bytes
9e107c59 72
2e1d04bc 73Force byte semantics rather than character semantics
9e107c59 74
75=item charnames
76
77Define character names for C<\N{named}> string literal escape.
78
19799a22 79=item constant
80
9e107c59 81Declare constants
f102b883 82
83=item diagnostics
84
2e1d04bc 85Perl compiler pragma to force verbose warning diagnostics
19799a22 86
87=item fields
88
2e1d04bc 89Compile-time class fields
19799a22 90
91=item filetest
92
2e1d04bc 93Control the filetest permission operators
f102b883 94
95=item integer
96
4e860d0a 97Use integer arithmetic instead of floating point
f102b883 98
99=item less
100
2e1d04bc 101Request less of something from the compiler
f102b883 102
f102b883 103=item locale
104
2e1d04bc 105Use and avoid POSIX locales for built-in operations
106
107=item open
108
109Set default disciplines for input and output
f102b883 110
111=item ops
112
9e107c59 113Restrict unsafe operations when compiling
f102b883 114
115=item overload
116
2e1d04bc 117Package for overloading perl operations
f102b883 118
b3eb6a9b 119=item re
120
2e1d04bc 121Alter regular expression behaviour
b3eb6a9b 122
f102b883 123=item sigtrap
124
9e107c59 125Enable simple signal handling
f102b883 126
127=item strict
128
9e107c59 129Restrict unsafe constructs
f102b883 130
131=item subs
132
2e1d04bc 133Predeclare sub names
f102b883 134
4e860d0a 135=item unicode::distinct
136
137Strictly distinguish UTF8 data and non-UTF data.
138
19799a22 139=item utf8
f102b883 140
1fa7ca25 141Enable/disable UTF-8 (or UTF-EBCDIC) in source code
f102b883 142
143=item vars
144
2e1d04bc 145Predeclare global variable names (obsolete)
f102b883 146
4438c4b7 147=item warnings
0453d815 148
9e107c59 149Control optional warnings
19799a22 150
13a2d996 151=item warnings::register
152
153Warnings import function
154
f102b883 155=back
156
157=head2 Standard Modules
158
159Standard, bundled modules are all expected to behave in a well-defined
160manner with respect to namespace pollution because they use the
161Exporter module. See their own documentation for details.
162
163=over 12
164
165=item AnyDBM_File
166
2e1d04bc 167Provide framework for multiple DBMs
f102b883 168
169=item AutoLoader
170
9e107c59 171Load subroutines only on demand
f102b883 172
173=item AutoSplit
174
9e107c59 175Split a package for autoloading
f102b883 176
19799a22 177=item B
178
2e1d04bc 179The Perl Compiler
19799a22 180
181=item B::Asmdata
182
183Autogenerated data about Perl ops, used to generate bytecode
184
185=item B::Assembler
186
187Assemble Perl bytecode
188
189=item B::Bblock
190
191Walk basic blocks
192
193=item B::Bytecode
194
195Perl compiler's bytecode backend
196
197=item B::C
198
199Perl compiler's C backend
200
201=item B::CC
202
203Perl compiler's optimized C translation backend
204
4e860d0a 205=item B::Concise
206
207Walk Perl syntax tree, printing concise info about ops
208
19799a22 209=item B::Debug
210
211Walk Perl syntax tree, printing debug info about ops
212
213=item B::Deparse
214
2e1d04bc 215Perl compiler backend to produce perl code
19799a22 216
217=item B::Disassembler
218
219Disassemble Perl bytecode
220
221=item B::Lint
222
2e1d04bc 223Perl lint
19799a22 224
225=item B::Showlex
226
227Show lexical variables used in functions or files
228
229=item B::Stackobj
230
231Helper module for CC backend
232
13a2d996 233=item B::Stash
234
235Show what stashes are loaded
236
19799a22 237=item B::Terse
238
239Walk Perl syntax tree, printing terse info about ops
240
241=item B::Xref
242
243Generates cross reference reports for Perl programs
244
f102b883 245=item Benchmark
246
2e1d04bc 247Benchmark running times of Perl code
9e107c59 248
249=item ByteLoader
250
2e1d04bc 251Load byte compiled perl code
f102b883 252
19799a22 253=item CGI
254
2e1d04bc 255Simple Common Gateway Interface Class
19799a22 256
257=item CGI::Apache
258
2e1d04bc 259Backward compatibility module for CGI.pm
19799a22 260
261=item CGI::Carp
262
263CGI routines for writing to the HTTPD (or other) error log
264
265=item CGI::Cookie
266
267Interface to Netscape Cookies
268
269=item CGI::Fast
270
271CGI Interface for Fast CGI
272
9e107c59 273=item CGI::Pretty
274
275Module to produce nicely formatted HTML code
276
19799a22 277=item CGI::Push
278
279Simple Interface to Server Push
280
281=item CGI::Switch
282
2e1d04bc 283Backward compatibility module for defunct CGI::Switch
19799a22 284
4e860d0a 285=item CGI::Util
286
287Internal utilities used by CGI module
288
f102b883 289=item CPAN
290
2e1d04bc 291Query, download and build perl modules from CPAN sites
f102b883 292
293=item CPAN::FirstTime
294
2e1d04bc 295Utility for CPAN::Config file Initialization
f102b883 296
297=item CPAN::Nox
298
19799a22 299Wrapper around CPAN.pm without using any XS module
f102b883 300
301=item Carp
302
2e1d04bc 303Warn of errors (from perspective of caller)
9e107c59 304
4e860d0a 305=item Carp::Heavy
306
307No user serviceable parts inside
308
309=item Class::ISA
310
311Report the search path for a class's ISA tree
312
f102b883 313=item Class::Struct
314
9e107c59 315Declare struct-like datatypes as Perl classes
f102b883 316
f102b883 317=item Cwd
318
9e107c59 319Get pathname of current working directory
f102b883 320
19799a22 321=item DB
322
2e1d04bc 323Programmatic interface to the Perl debugging API (draft, subject to
19799a22 324
f102b883 325=item DB_File
326
19799a22 327Perl5 access to Berkeley DB version 1.x
328
f102b883 329=item Devel::SelfStubber
330
9e107c59 331Generate stubs for a SelfLoading module
f102b883 332
4e860d0a 333=item Digest
334
335Modules that calculate message digests
336
f102b883 337=item DirHandle
338
9e107c59 339Supply object methods for directory handles
f102b883 340
19799a22 341=item Dumpvalue
342
2e1d04bc 343Provides screen dump of Perl data.
f102b883 344
13a2d996 345=item Encode
346
347Character encodings
348
4e860d0a 349=item Encode::EncodeFormat
350
351The format of encoding tables of the Encode extension
352
353=item Encode::Tcl
354
355Tcl encodings
356
f102b883 357=item English
358
2e1d04bc 359Use nice English (or awk) names for ugly punctuation variables
f102b883 360
361=item Env
362
2e1d04bc 363Perl module that imports environment variables as scalars or arrays
f102b883 364
365=item Exporter
366
2e1d04bc 367Implements default import method for modules
9e107c59 368
369=item Exporter::Heavy
370
371Exporter guts
19799a22 372
373=item ExtUtils::Command
374
2e1d04bc 375Utilities to replace common UNIX commands in Makefiles etc.
f102b883 376
377=item ExtUtils::Embed
378
2e1d04bc 379Utilities for embedding Perl in C/C++ applications
f102b883 380
381=item ExtUtils::Install
382
9e107c59 383Install files from here to there
f102b883 384
19799a22 385=item ExtUtils::Installed
386
387Inventory management of installed modules
388
f102b883 389=item ExtUtils::Liblist
390
9e107c59 391Determine libraries to use and how to use them
392
393=item ExtUtils::MM_Cygwin
394
2e1d04bc 395Methods to override UN*X behaviour in ExtUtils::MakeMaker
f102b883 396
397=item ExtUtils::MM_OS2
398
2e1d04bc 399Methods to override UN*X behaviour in ExtUtils::MakeMaker
f102b883 400
401=item ExtUtils::MM_Unix
402
9e107c59 403Methods used by ExtUtils::MakeMaker
f102b883 404
405=item ExtUtils::MM_VMS
406
2e1d04bc 407Methods to override UN*X behaviour in ExtUtils::MakeMaker
19799a22 408
409=item ExtUtils::MM_Win32
410
2e1d04bc 411Methods to override UN*X behaviour in ExtUtils::MakeMaker
f102b883 412
413=item ExtUtils::MakeMaker
414
9e107c59 415Create an extension Makefile
f102b883 416
417=item ExtUtils::Manifest
418
9e107c59 419Utilities to write and check a MANIFEST file
f102b883 420
421=item ExtUtils::Mkbootstrap
422
9e107c59 423Make a bootstrap file for use by DynaLoader
f102b883 424
425=item ExtUtils::Mksymlists
426
9e107c59 427Write linker options files for dynamic extension
f102b883 428
19799a22 429=item ExtUtils::Packlist
430
9e107c59 431Manage .packlist files
19799a22 432
f102b883 433=item ExtUtils::testlib
434
9e107c59 435Add blib/* directories to @INC
f102b883 436
b6c543e3 437=item Fatal
438
9e107c59 439Replace functions with equivalents which succeed or die
b6c543e3 440
f102b883 441=item Fcntl
442
2e1d04bc 443Load the C Fcntl.h defines
f102b883 444
445=item File::Basename
446
9e107c59 447Split a pathname into pieces
448
449=item File::CheckTree
450
451Run many filetest checks on a tree
f102b883 452
f102b883 453=item File::Compare
454
19799a22 455Compare files or filehandles
f102b883 456
457=item File::Copy
458
19799a22 459Copy files or filehandles
460
461=item File::DosGlob
462
2e1d04bc 463DOS like globbing and then some
f102b883 464
465=item File::Find
466
2e1d04bc 467Traverse a file tree
f102b883 468
469=item File::Path
470
2e1d04bc 471Create or remove directory trees
f102b883 472
f505c983 473=item File::Spec
474
9e107c59 475Portably perform operations on file names
f505c983 476
165c0277 477=item File::Spec::Epoc
478
479Methods for Epoc file specs
480
f505c983 481=item File::Spec::Functions
482
9e107c59 483Portably perform operations on file names
19799a22 484
485=item File::Spec::Mac
486
487File::Spec for MacOS
488
489=item File::Spec::OS2
490
9e107c59 491Methods for OS/2 file specs
19799a22 492
493=item File::Spec::Unix
494
9e107c59 495Methods used by File::Spec
19799a22 496
497=item File::Spec::VMS
498
9e107c59 499Methods for VMS file specs
19799a22 500
501=item File::Spec::Win32
502
9e107c59 503Methods for Win32 file specs
f505c983 504
2e1d04bc 505=item File::Temp
506
507Return name and handle of a temporary file safely
508
f102b883 509=item File::stat
510
9e107c59 511By-name interface to Perl's built-in stat() functions
f102b883 512
513=item FileCache
514
9e107c59 515Keep more files open than the system permits
f102b883 516
517=item FileHandle
518
9e107c59 519Supply object methods for filehandles
f102b883 520
165c0277 521=item Filter::Simple
522
523Simplified source filtering
524
f102b883 525=item FindBin
526
2e1d04bc 527Locate directory of original perl script
f102b883 528
529=item Getopt::Long
530
9e107c59 531Extended processing of command line options
f102b883 532
533=item Getopt::Std
534
19799a22 535Process single-character switches with switch clustering
f102b883 536
537=item I18N::Collate
538
2e1d04bc 539Compare 8-bit scalar data according to the current locale
f102b883 540
541=item IO
542
2e1d04bc 543Load various IO modules
f102b883 544
545=item IPC::Open2
546
9e107c59 547Open a process for both reading and writing
f102b883 548
549=item IPC::Open3
550
9e107c59 551Open a process for reading, writing, and error handling
f102b883 552
4e860d0a 553=item Locale::Constants
554
555Constants for Locale codes
556
557=item Locale::Country
558
559ISO codes for country identification (ISO 3166)
560
561=item Locale::Currency
562
563ISO three letter codes for currency identification (ISO 4217)
564
565=item Locale::Language
566
567ISO two letter codes for language identification (ISO 639)
568
f102b883 569=item Math::BigFloat
570
19799a22 571Arbitrary length float math package
f102b883 572
573=item Math::BigInt
574
19799a22 575Arbitrary size integer math package
f102b883 576
577=item Math::Complex
578
9e107c59 579Complex numbers and associated mathematical functions
f102b883 580
404b15a1 581=item Math::Trig
582
9e107c59 583Trigonometric functions
f102b883 584
2e1d04bc 585=item NDBM_File
586
587Tied access to ndbm files
588
1fa7ca25 589=item NEXT
590
591Provide a pseudo-class NEXT that allows method redispatch
592
f102b883 593=item Net::Ping
594
9e107c59 595Check a remote host for reachability
f102b883 596
597=item Net::hostent
598
9e107c59 599By-name interface to Perl's built-in gethost*() functions
f102b883 600
601=item Net::netent
602
9e107c59 603By-name interface to Perl's built-in getnet*() functions
f102b883 604
605=item Net::protoent
606
9e107c59 607By-name interface to Perl's built-in getproto*() functions
f102b883 608
609=item Net::servent
610
9e107c59 611By-name interface to Perl's built-in getserv*() functions
f102b883 612
19799a22 613=item O
f102b883 614
19799a22 615Generic interface to Perl Compiler backends
f102b883 616
2e1d04bc 617=item ODBM_File
f102b883 618
2e1d04bc 619Tied access to odbm files
f102b883 620
2e1d04bc 621=item Opcode
f102b883 622
2e1d04bc 623Disable named opcodes when compiling perl code
19799a22 624
4e860d0a 625=item POSIX
626
627Perl interface to IEEE Std 1003.1
628
629=item PerlIO
630
631On demand loader for PerlIO layers and root of PerlIO::* name space
632
9e107c59 633=item Pod::Checker
634
635Check pod documents for syntax errors
636
2e1d04bc 637=item Pod::Find
638
639Find POD documents in directory trees
640
19799a22 641=item Pod::Html
642
9e107c59 643Module to convert pod files to HTML
644
645=item Pod::InputObjects
646
2e1d04bc 647Objects representing POD input paragraphs, commands, etc.
9e107c59 648
13a2d996 649=item Pod::LaTeX
650
651Convert Pod data to formatted Latex
652
9e107c59 653=item Pod::Man
654
655Convert POD data to formatted *roff input
656
2e1d04bc 657=item Pod::ParseUtils
658
659Helpers for POD parsing and conversion
660
9e107c59 661=item Pod::Parser
662
663Base class for creating POD filters and translators
664
2e1d04bc 665=item Pod::Plainer
666
667Perl extension for converting Pod to old style Pod.
668
9e107c59 669=item Pod::Select
670
671Extract selected sections of POD from input
19799a22 672
673=item Pod::Text
674
9e107c59 675Convert POD data to formatted ASCII text
676
677=item Pod::Text::Color
678
679Convert POD data to formatted color ASCII text
680
4e860d0a 681=item Pod::Text::Overstrike
682
683Convert POD data to formatted overstrike text
684
2e1d04bc 685=item Pod::Text::Termcap
686
687Convert POD data to ASCII text with format escapes
688
9e107c59 689=item Pod::Usage
690
691Print a usage message from embedded pod documentation
f102b883 692
693=item SDBM_File
694
19799a22 695Tied access to sdbm files
f102b883 696
697=item Safe
698
19799a22 699Compile and execute code in restricted compartments
f102b883 700
701=item Search::Dict
702
9e107c59 703Search for key in dictionary file
f102b883 704
705=item SelectSaver
706
9e107c59 707Save and restore selected file handle
f102b883 708
709=item SelfLoader
710
9e107c59 711Load functions only on demand
f102b883 712
713=item Shell
714
2e1d04bc 715Run shell commands transparently within perl
f102b883 716
717=item Socket
718
2e1d04bc 719Load the C socket.h defines and structure manipulators
f102b883 720
13a2d996 721=item Storable
722
723Persistency for perl data structures
724
4e860d0a 725=item Switch
726
727A switch statement for Perl
728
f102b883 729=item Symbol
730
9e107c59 731Manipulate Perl symbols and their names
f102b883 732
2e1d04bc 733=item Term::ANSIColor
f102b883 734
2e1d04bc 735Color screen output using ANSI escape sequences
f102b883 736
737=item Term::Cap
738
2e1d04bc 739Perl termcap interface
f102b883 740
741=item Term::Complete
742
2e1d04bc 743Perl word completion module
f102b883 744
745=item Term::ReadLine
746
2e1d04bc 747Perl interface to various C<readline> packages. If
19799a22 748
749=item Test
750
9e107c59 751Provides a simple framework for writing test scripts
f102b883 752
753=item Test::Harness
754
2e1d04bc 755Run perl standard test scripts with statistics
f102b883 756
757=item Text::Abbrev
758
9e107c59 759Create an abbreviation table from a list
f102b883 760
4e860d0a 761=item Text::Balanced
762
763Extract delimited text sequences from strings.
764
f102b883 765=item Text::ParseWords
766
2e1d04bc 767Parse text into an array of tokens or array of arrays
f102b883 768
769=item Text::Soundex
770
2e1d04bc 771Implementation of the Soundex Algorithm as Described by Knuth
f102b883 772
4e860d0a 773=item Text::Tabs
774
775Expand and unexpand tabs per the unix expand(1) and unexpand(1)
776
f102b883 777=item Text::Wrap
778
9e107c59 779Line wrapping to form simple paragraphs
19799a22 780
781=item Tie::Array
782
9e107c59 783Base class for tied arrays
19799a22 784
785=item Tie::Handle
786
9e107c59 787Base class definitions for tied handles
19799a22 788
9e107c59 789=item Tie::Hash
f102b883 790
9e107c59 791Base class definitions for tied hashes
f102b883 792
793=item Tie::RefHash
794
9e107c59 795Use references as hash keys
f102b883 796
9e107c59 797=item Tie::Scalar
f102b883 798
9e107c59 799Base class definitions for tied scalars
f102b883 800
801=item Tie::SubstrHash
802
19799a22 803Fixed-table-size, fixed-key-length hashing
f102b883 804
805=item Time::Local
806
9e107c59 807Efficiently compute time from local and GMT time
f102b883 808
809=item Time::gmtime
810
9e107c59 811By-name interface to Perl's built-in gmtime() function
f102b883 812
813=item Time::localtime
814
9e107c59 815By-name interface to Perl's built-in localtime() function
f102b883 816
817=item Time::tm
818
9e107c59 819Internal object used by Time::gmtime and Time::localtime
f102b883 820
821=item UNIVERSAL
822
9e107c59 823Base class for ALL classes (blessed references)
f102b883 824
825=item User::grent
826
9e107c59 827By-name interface to Perl's built-in getgr*() functions
f102b883 828
829=item User::pwent
830
9e107c59 831By-name interface to Perl's built-in getpw*() functions
f102b883 832
4e860d0a 833=item Win32
834
835Interfaces to some Win32 API Functions
836
f102b883 837=back
838
19799a22 839To find out I<all> modules installed on your system, including
2e1d04bc 840those without documentation or outside the standard release,
b1866b2d 841just do this:
f102b883 842
5a964f20 843 % find `perl -e 'print "@INC"'` -name '*.pm' -print
f102b883 844
2e1d04bc 845They should all have their own documentation installed and accessible
846via your system man(1) command. If you do not have a B<find>
19799a22 847program, you can use the Perl B<find2perl> program instead, which
848generates Perl code as output you can run through perl. If you
849have a B<man> program but it doesn't find your modules, you'll have
2e1d04bc 850to fix your manpath. See L<perl> for details. If you have no
851system B<man> command, you might try the B<perldoc> program.
f102b883 852
853=head2 Extension Modules
854
19799a22 855Extension modules are written in C (or a mix of Perl and C). They
856are usually dynamically loaded into Perl if and when you need them,
2e1d04bc 857but may also be be linked in statically. Supported extension modules
19799a22 858include Socket, Fcntl, and POSIX.
f102b883 859
860Many popular C extension modules do not come bundled (at least, not
19799a22 861completely) due to their sizes, volatility, or simply lack of time
862for adequate testing and configuration across the multitude of
863platforms on which Perl was beta-tested. You are encouraged to
864look for them on CPAN (described below), or using web search engines
865like Alta Vista or Deja News.
f102b883 866
867=head1 CPAN
868
19799a22 869CPAN stands for Comprehensive Perl Archive Network; it's a globally
870replicated trove of Perl materials, including documentation, style
2e1d04bc 871guides, tricks and traps, alternate ports to non-Unix systems and
19799a22 872occasional binary distributions for these. Search engines for
873CPAN can be found at http://cpan.perl.com/ and at
874http://theory.uwinnipeg.ca/mod_perl/cpan-search.pl .
875
876Most importantly, CPAN includes around a thousand unbundled modules,
877some of which require a C compiler to build. Major categories of
878modules are:
f102b883 879
4e860d0a 880=over
f102b883 881
882=item *
551e1d92 883
f102b883 884Language Extensions and Documentation Tools
885
886=item *
551e1d92 887
f102b883 888Development Support
889
890=item *
551e1d92 891
f102b883 892Operating System Interfaces
893
894=item *
551e1d92 895
f102b883 896Networking, Device Control (modems) and InterProcess Communication
897
898=item *
551e1d92 899
f102b883 900Data Types and Data Type Utilities
901
902=item *
551e1d92 903
f102b883 904Database Interfaces
905
906=item *
551e1d92 907
f102b883 908User Interfaces
909
910=item *
551e1d92 911
f102b883 912Interfaces to / Emulations of Other Programming Languages
913
914=item *
551e1d92 915
f102b883 916File Names, File Systems and File Locking (see also File Handles)
917
918=item *
551e1d92 919
f102b883 920String Processing, Language Text Processing, Parsing, and Searching
921
922=item *
551e1d92 923
f102b883 924Option, Argument, Parameter, and Configuration File Processing
925
926=item *
551e1d92 927
f102b883 928Internationalization and Locale
929
930=item *
551e1d92 931
f102b883 932Authentication, Security, and Encryption
933
934=item *
551e1d92 935
f102b883 936World Wide Web, HTML, HTTP, CGI, MIME
937
938=item *
551e1d92 939
f102b883 940Server and Daemon Utilities
941
942=item *
551e1d92 943
f102b883 944Archiving and Compression
945
946=item *
551e1d92 947
f102b883 948Images, Pixmap and Bitmap Manipulation, Drawing, and Graphing
949
950=item *
551e1d92 951
f102b883 952Mail and Usenet News
953
954=item *
551e1d92 955
f102b883 956Control Flow Utilities (callbacks and exceptions etc)
957
958=item *
551e1d92 959
f102b883 960File Handle and Input/Output Stream Utilities
961
962=item *
551e1d92 963
f102b883 964Miscellaneous Modules
965
966=back
967
19799a22 968Registered CPAN sites as of this writing include the following.
f102b883 969You should try to choose one close to you:
970
4e860d0a 971=head2 Africa
972
cea6626f 973=over 4
f102b883 974
4e860d0a 975=item *
976
977South Africa
978
979 ftp://ftp.is.co.za/programming/perl/CPAN/
980 ftp://ftp.saix.net/pub/CPAN/
981 ftp://ftpza.co.za/pub/mirrors/cpan/
982 ftp://ftp.sun.ac.za/CPAN/
983
984=back
985
986=head2 Asia
987
988=over 4
989
990=item *
991
992China
993
994 ftp://freesoft.cei.gov.cn/pub/languages/perl/CPAN/
995 http://www2.linuxforum.net/mirror/CPAN/
996 http://cpan.shellhung.org/
997 ftp://ftp.shellhung.org/pub/CPAN
998
999=item *
1000
1001Hong Kong
1002
1003 http://CPAN.pacific.net.hk/
1004 ftp://ftp.pacific.net.hk/pub/mirror/CPAN/
1005
1006=item *
1007
1008Indonesia
1009
1010 http://piksi.itb.ac.id/CPAN/
1011 ftp://mirrors.piksi.itb.ac.id/CPAN/
1012 http://CPAN.mweb.co.id/
1013 ftp://ftp.mweb.co.id/pub/languages/perl/CPAN/
1014
1015=item *
1016
1017Israel
1018
1019 http://www.iglu.org.il:/pub/CPAN/
1020 ftp://ftp.iglu.org.il/pub/CPAN/
1021 http://bioinfo.weizmann.ac.il/pub/software/perl/CPAN/
1022 ftp://bioinfo.weizmann.ac.il/pub/software/perl/CPAN/
1023
1024=item *
1025
1026Japan
1027
1028 ftp://ftp.u-aizu.ac.jp/pub/lang/perl/CPAN/
1029 ftp://ftp.kddlabs.co.jp/CPAN/
1030 http://mirror.nucba.ac.jp/mirror/Perl/
1031 ftp://mirror.nucba.ac.jp/mirror/Perl/
1032 ftp://ftp.meisei-u.ac.jp/pub/CPAN/
1033 ftp://ftp.jaist.ac.jp/pub/lang/perl/CPAN/
1034 ftp://ftp.dti.ad.jp/pub/lang/CPAN/
1035 ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/
1036
1037=item *
1038
1039Saudi Arabia
1040
1041 ftp://ftp.isu.net.sa/pub/CPAN/
1042
1043=item *
1044
1045Singapore
1046
1047 http://cpan.hjc.edu.sg
1048 http://ftp.nus.edu.sg/unix/perl/CPAN/
1049 ftp://ftp.nus.edu.sg/pub/unix/perl/CPAN/
1050
1051=item *
1052
1053South Korea
1054
1055 http://CPAN.bora.net/
1056 ftp://ftp.bora.net/pub/CPAN/
1057 http://ftp.kornet.net/CPAN/
1058 ftp://ftp.kornet.net/pub/CPAN/
1059 ftp://ftp.nuri.net/pub/CPAN/
1060
1061=item *
1062
1063Taiwan
1064
1065 ftp://coda.nctu.edu.tw/UNIX/perl/CPAN
1066 ftp://ftp.ee.ncku.edu.tw/pub/perl/CPAN/
1067 ftp://ftp1.sinica.edu.tw/pub1/perl/CPAN/
1068
1069=item *
1070
1071Thailand
1072
1073 http://download.nectec.or.th/CPAN/
1074 ftp://ftp.nectec.or.th/pub/languages/CPAN/
1075 ftp://ftp.cs.riubon.ac.th/pub/mirrors/CPAN/
1076
1077=back
1078
1079=head2 Central America
1080
1081=over 4
1082
1083=item *
1084
1085Costa Rica
1086
1087 ftp://ftp.linux.co.cr/mirrors/CPAN/
1088 http://ftp.ucr.ac.cr/Unix/CPAN/
1089 ftp://ftp.ucr.ac.cr/pub/Unix/CPAN/
1090
1091=back
1092
1093=head2 Europe
1094
1095=over 4
1096
1097=item *
1098
1099Austria
1100
1101 ftp://ftp.tuwien.ac.at/pub/languages/perl/CPAN/
1102
1103=item *
1104
1105Belgium
1106
1107 http://ftp.easynet.be/CPAN/
1108 ftp://ftp.easynet.be/CPAN/
1109 ftp://ftp.kulnet.kuleuven.ac.be/pub/mirror/CPAN/
1110
1111=item *
1112
1113Bulgaria
1114
1115 ftp://ftp.ntrl.net/pub/mirrors/CPAN/
1116
1117=item *
1118
1119Croatia
1120
1121 ftp://ftp.linux.hr/pub/CPAN/
1122
1123=item *
1124
1125Czech Republic
1126
1127 http://www.fi.muni.cz/pub/perl/
1128 ftp://ftp.fi.muni.cz/pub/perl/
1129 ftp://sunsite.mff.cuni.cz/MIRRORS/ftp.funet.fi/pub/languages/perl/CPAN/
1130
1131=item *
1132
1133Denmark
1134
1135 ftp://sunsite.auc.dk/pub/languages/perl/CPAN/
1136 http://www.cpan.dk/CPAN/
1137 ftp://www.cpan.dk/ftp.cpan.org/CPAN/
1138
1139=item *
1140
1141England
1142
1143 http://www.mirror.ac.uk/sites/ftp.funet.fi/pub/languages/perl/CPAN
1144 ftp://ftp.mirror.ac.uk/sites/ftp.funet.fi/pub/languages/perl/CPAN/
1145 ftp://ftp.demon.co.uk/pub/mirrors/perl/CPAN/
1146 ftp://ftp.flirble.org/pub/languages/perl/CPAN/
1147 ftp://ftp.plig.org/pub/CPAN/
1148 ftp://sunsite.doc.ic.ac.uk/packages/CPAN/
1149 http://mirror.uklinux.net/CPAN/
1150 ftp://mirror.uklinux.net/pub/CPAN/
1151 ftp://usit.shef.ac.uk/pub/packages/CPAN/
1152
1153=item *
1154
1155Estonia
1156
1157 ftp://ftp.ut.ee/pub/languages/perl/CPAN/
1158
1159=item *
1160
1161Finland
1162
1163 ftp://ftp.funet.fi/pub/languages/perl/CPAN/
1164
1165=item *
1166
1167France
1168
1169 ftp://cpan.ftp.worldonline.fr/pub/CPAN/
1170 ftp://ftp.club-internet.fr/pub/perl/CPAN/
1171 ftp://ftp.lip6.fr/pub/perl/CPAN/
1172 ftp://ftp.oleane.net/pub/mirrors/CPAN/
1173 ftp://ftp.pasteur.fr/pub/computing/CPAN/
1174 ftp://cpan.cict.fr/pub/CPAN/
1175 ftp://ftp.uvsq.fr/pub/perl/CPAN/
1176
1177=item *
1178
1179Germany
1180
1181 ftp://ftp.rz.ruhr-uni-bochum.de/pub/CPAN/
1182 ftp://ftp.freenet.de/pub/ftp.cpan.org/pub/CPAN/
1183 ftp://ftp.uni-erlangen.de/pub/source/CPAN/
1184 ftp://ftp-stud.fht-esslingen.de/pub/Mirrors/CPAN
1185 ftp://ftp.gigabell.net/pub/CPAN/
1186 http://ftp.gwdg.de/pub/languages/perl/CPAN/
1187 ftp://ftp.gwdg.de/pub/languages/perl/CPAN/
1188 ftp://ftp.uni-hamburg.de/pub/soft/lang/perl/CPAN/
1189 ftp://ftp.leo.org/pub/comp/general/programming/languages/script/perl/CPAN/
1190 ftp://ftp.mpi-sb.mpg.de/pub/perl/CPAN/
1191 ftp://ftp.gmd.de/mirrors/CPAN/
1192
1193=item *
1194
1195Greece
1196
1197 ftp://ftp.forthnet.gr/pub/languages/perl/CPAN
1198 ftp://ftp.ntua.gr/pub/lang/perl/
1199
1200=item *
1201
1202Hungary
1203
1204 http://cpan.artifact.hu/
1205 ftp://cpan.artifact.hu/CPAN/
1206 ftp://ftp.kfki.hu/pub/packages/perl/CPAN/
1207
1208=item *
1209
1210Iceland
1211
1212 http://cpan.gm.is/
1213 ftp://ftp.gm.is/pub/CPAN/
1214
1215=item *
1216
1217Ireland
1218
1219 http://cpan.indigo.ie/
1220 ftp://cpan.indigo.ie/pub/CPAN/
1221 http://sunsite.compapp.dcu.ie/pub/perl/
1222 ftp://sunsite.compapp.dcu.ie/pub/perl/
1223
1224=item *
1225
1226Italy
1227
1228 http://cpan.nettuno.it/
1229 http://gusp.dyndns.org/CPAN/
1230 ftp://gusp.dyndns.org/pub/CPAN
1231 http://softcity.iol.it/cpan
1232 ftp://softcity.iol.it/pub/cpan
1233 ftp://ftp.unina.it/pub/Other/CPAN/
1234 ftp://ftp.unipi.it/pub/mirror/perl/CPAN/
1235 ftp://cis.uniRoma2.it/CPAN/
1236 ftp://ftp.edisontel.it/pub/CPAN_Mirror/
1237 ftp://ftp.flashnet.it/pub/CPAN/
1238
1239=item *
1240
1241Latvia
1242
1243 http://kvin.lv/pub/CPAN/
1244
1245=item *
1246
1247Netherlands
1248
1249 ftp://download.xs4all.nl/pub/mirror/CPAN/
1250 ftp://ftp.nl.uu.net/pub/CPAN/
1251 ftp://ftp.nluug.nl/pub/languages/perl/CPAN/
1252 ftp://ftp.cpan.nl/pub/CPAN/
1253 http://www.cs.uu.nl/mirror/CPAN/
1254 ftp://ftp.cs.uu.nl/mirror/CPAN/
1255
1256=item *
1257
1258Norway
1259
1260 ftp://sunsite.uio.no/pub/languages/perl/CPAN/
1261 ftp://ftp.uit.no/pub/languages/perl/cpan/
1262
1263=item *
1264
1265Poland
1266
1267 ftp://ftp.pk.edu.pl/pub/lang/perl/CPAN/
1268 ftp://ftp.mega.net.pl/pub/mirrors/ftp.perl.com/
1269 ftp://ftp.man.torun.pl/pub/doc/CPAN/
1270 ftp://sunsite.icm.edu.pl/pub/CPAN/
1271
1272=item *
1273
1274Portugal
1275
1276 ftp://ftp.ua.pt/pub/CPAN/
1277 ftp://perl.di.uminho.pt/pub/CPAN/
1278 ftp://ftp.ist.utl.pt/pub/CPAN/
1279 ftp://ftp.netc.pt/pub/CPAN/
1280
1281=item *
1282
1283Romania
1284
1285 ftp://archive.logicnet.ro/mirrors/ftp.cpan.org/CPAN/
1286 ftp://ftp.kappa.ro/pub/mirrors/ftp.perl.org/pub/CPAN/
1287 ftp://ftp.dntis.ro/pub/cpan/
1288 ftp://ftp.opsynet.com/cpan/
1289 ftp://ftp.dnttm.ro/pub/CPAN/
1290 ftp://ftp.timisoara.roedu.net/mirrors/CPAN/
1291
1292=item *
1293
1294Russia
1295
1296 ftp://ftp.chg.ru/pub/lang/perl/CPAN/
1297 http://cpan.rinet.ru/
1298 ftp://cpan.rinet.ru/pub/mirror/CPAN/
1299 ftp://ftp.aha.ru/pub/CPAN/
1300 ftp://ftp.sai.msu.su/pub/lang/perl/CPAN/
1301
1302=item *
1303
1304Slovakia
1305
1306 ftp://ftp.entry.sk/pub/languages/perl/CPAN/
1307
1308=item *
1309
1310Slovenia
1311
1312 ftp://ftp.arnes.si/software/perl/CPAN/
1313
1314=item *
1315
1316Spain
1317
1318 ftp://ftp.rediris.es/mirror/CPAN/
1319 ftp://ftp.etse.urv.es/pub/perl/
1320
1321=item *
1322
1323Sweden
1324
1325 http://ftp.du.se/CPAN/
1326 ftp://ftp.du.se/pub/CPAN/
1327 ftp://ftp.sunet.se/pub/lang/perl/CPAN/
1328
1329=item *
1330
1331Switzerland
1332
1333 ftp://ftp.danyk.ch/CPAN/
1334 ftp://sunsite.cnlab-switch.ch/mirror/CPAN/
1335
1336=item *
1337
1338Turkey
1339
1340 ftp://sunsite.bilkent.edu.tr/pub/languages/CPAN/
1341
1342=back
1343
1344=head2 North America
1345
1346=over 4
1347
1348=item *
1349
1350Canada
1351
1352=over 8
1353
1354=item *
1355
1356Alberta
1357
1358 http://sunsite.ualberta.ca/pub/Mirror/CPAN/
1359 ftp://sunsite.ualberta.ca/pub/Mirror/CPAN/
1360
1361=item *
1362
1363Manitoba
1364
1365 http://theoryx5.uwinnipeg.ca/pub/CPAN/
1366 ftp://theoryx5.uwinnipeg.ca/pub/CPAN/
1367
1368=item *
1369
1370Nova Scotia
1371
1372 ftp://cpan.chebucto.ns.ca/pub/CPAN/
1373
1374=item *
1375
1376Ontario
1377
1378 ftp://ftp.crc.ca/pub/packages/lang/perl/CPAN/
1379
1380=item *
1381
1382Mexico
1383
1384 http://www.msg.com.mx/CPAN/
1385 ftp://ftp.msg.com.mx/pub/CPAN/
1386
1387=back
1388
1389=item *
1390
1391United States
1392
1393=over 8
1394
1395=item *
1396
1397Alabama
1398
1399 http://mirror.hiwaay.net/CPAN/
1400 ftp://mirror.hiwaay.net/CPAN/
1401
1402=item *
1403
1404California
1405
1406 http://www.cpan.org/
1407 ftp://ftp.cpan.org/CPAN/
1408 ftp://cpan.nas.nasa.gov/pub/perl/CPAN/
1409 ftp://ftp.digital.com/pub/plan/perl/CPAN/
1410 http://www.kernel.org/pub/mirrors/cpan/
1411 ftp://ftp.kernel.org/pub/mirrors/cpan/
1412 http://www.perl.com/CPAN/
1413 http://download.sourceforge.net/mirrors/CPAN/
1414
1415=item *
1416
1417Colorado
1418
1419 ftp://ftp.cs.colorado.edu/pub/perl/CPAN/
1420
1421=item *
1422
1423Florida
1424
1425 ftp://ftp.cise.ufl.edu/pub/perl/CPAN/
1426
1427=item *
1428
1429Georgia
1430
1431 ftp://ftp.twoguys.org/CPAN/
1432
1433=item *
1434
1435Illinois
1436
1437 http://www.neurogames.com/mirrors/CPAN
1438 http://uiarchive.uiuc.edu/mirrors/ftp/ftp.cpan.org/pub/CPAN/
1439 ftp://uiarchive.uiuc.edu/mirrors/ftp/ftp.cpan.org/pub/CPAN/
1440
1441=item *
1442
1443Indiana
1444
1445 ftp://ftp.uwsg.indiana.edu/pub/perl/CPAN/
1446 http://cpan.nitco.com/
1447 ftp://cpan.nitco.com/pub/CPAN/
1448 ftp://cpan.in-span.net/
1449 http://csociety-ftp.ecn.purdue.edu/pub/CPAN
1450 ftp://csociety-ftp.ecn.purdue.edu/pub/CPAN
1451
1452=item *
1453
1454Kentucky
1455
1456 http://cpan.uky.edu/
1457 ftp://cpan.uky.edu/pub/CPAN/
1458
1459=item *
1460
1461Massachusetts
1462
1463 ftp://ftp.ccs.neu.edu/net/mirrors/ftp.funet.fi/pub/languages/perl/CPAN/
1464 ftp://ftp.iguide.com/pub/mirrors/packages/perl/CPAN/
1465
1466=item *
1467
1468New Jersey
1469
1470 ftp://ftp.cpanel.net/pub/CPAN/
1471
1472=item *
1473
1474New York
1475
1476 ftp://ftp.freesoftware.com/pub/perl/CPAN/
1477 http://www.deao.net/mirrors/CPAN/
1478 ftp://ftp.deao.net/pub/CPAN/
1479 ftp://ftp.stealth.net/pub/mirrors/ftp.cpan.org/pub/CPAN/
1480 http://mirror.nyc.anidea.com/CPAN/
1481 ftp://mirror.nyc.anidea.com/pub/CPAN/
1482 http://www.rge.com/pub/languages/perl/
1483 ftp://ftp.rge.com/pub/languages/perl/
1484 ftp://mirrors.cloud9.net/pub/mirrors/CPAN/
1485
1486=item *
1487
1488North Carolina
1489
1490 ftp://ftp.duke.edu/pub/perl/
1491
1492=item *
1493
1494Ohio
1495
1496 ftp://ftp.loaded.net/pub/CPAN/
1497
1498=item *
1499
1500Oklahoma
1501
1502 ftp://ftp.ou.edu/mirrors/CPAN/
1503
1504=item *
1505
1506Oregon
1507
1508 ftp://ftp.orst.edu/pub/packages/CPAN/
1509
1510=item *
1511
1512Pennsylvania
1513
1514 http://ftp.epix.net/CPAN/
1515 ftp://ftp.epix.net/pub/languages/perl/
1516 ftp://carroll.cac.psu.edu/pub/CPAN/
1517
1518=item *
1519
1520Tennessee
1521
1522 ftp://ftp.sunsite.utk.edu/pub/CPAN/
1523
1524=item *
1525
1526Texas
1527
1528 http://ftp.sedl.org/pub/mirrors/CPAN/
1529 http://jhcloos.com/pub/mirror/CPAN/
1530 ftp://jhcloos.com/pub/mirror/CPAN/
1531
1532=item *
1533
1534Utah
1535
1536 ftp://mirror.xmission.com/CPAN/
1537
1538=item *
1539
1540Virginia
1541
1542 http://mirrors.rcn.net/pub/lang/CPAN/
1543 ftp://mirrors.rcn.net/pub/lang/CPAN/
1544 ftp://ruff.cs.jmu.edu/pub/CPAN/
1545 http://perl.Liquidation.com/CPAN/
1546
1547=item *
1548
1549Washington
1550
1551 http://cpan.llarian.net/
1552 ftp://cpan.llarian.net/pub/CPAN/
1553 ftp://ftp-mirror.internap.com/pub/CPAN/
1554 ftp://ftp.spu.edu/pub/CPAN/
1555
1556=back
1557
1558=back
1559
1560=head2 Oceania
1561
1562=over 4
1563
1564=item *
1565
1566Australia
1567
1568 http://ftp.planetmirror.com/pub/CPAN/
1569 ftp://ftp.planetmirror.com/pub/CPAN/
1570 ftp://mirror.aarnet.edu.au/pub/perl/CPAN/
1571 ftp://cpan.topend.com.au/pub/CPAN/
1572
1573=item *
1574
1575New Zealand
1576
1577 ftp://ftp.auckland.ac.nz/pub/perl/CPAN/
1578
1579=back
1580
1581=head2 South America
1582
1583=over 4
1584
1585=item *
1586
1587Argentina
1588
1589 ftp://mirrors.bannerlandia.com.ar/mirrors/CPAN/
1590
1591=item *
1592
1593Brazil
1594
1595 ftp://cpan.pop-mg.com.br/pub/CPAN/
1596 ftp://ftp.matrix.com.br/pub/perl/
1597 ftp://cpan.if.usp.br/pub/mirror/CPAN/
1598
1599=item *
1600
1601Chile
1602
1603 ftp://ftp.psinet.cl/pub/programming/perl/CPAN/
1604 ftp://sunsite.dcc.uchile.cl/pub/lang/perl/
f102b883 1605
1606=back
1607
1608For an up-to-date listing of CPAN sites,
4e860d0a 1609see http://www.cpan.org/SITES or ftp://www.cpan.org/SITES .
f102b883 1610
1611=head1 Modules: Creation, Use, and Abuse
1612
1613(The following section is borrowed directly from Tim Bunce's modules
1614file, available at your nearest CPAN site.)
1615
1616Perl implements a class using a package, but the presence of a
1617package doesn't imply the presence of a class. A package is just a
1618namespace. A class is a package that provides subroutines that can be
1619used as methods. A method is just a subroutine that expects, as its
1620first argument, either the name of a package (for "static" methods),
1621or a reference to something (for "virtual" methods).
1622
1623A module is a file that (by convention) provides a class of the same
1624name (sans the .pm), plus an import method in that class that can be
1625called to fetch exported symbols. This module may implement some of
1626its methods by loading dynamic C or C++ objects, but that should be
1627totally transparent to the user of the module. Likewise, the module
1628might set up an AUTOLOAD function to slurp in subroutine definitions on
1629demand, but this is also transparent. Only the F<.pm> file is required to
2e1d04bc 1630exist. See L<perlsub>, L<perltoot>, and L<AutoLoader> for details about
f102b883 1631the AUTOLOAD mechanism.
1632
1633=head2 Guidelines for Module Creation
1634
1635=over 4
1636
4e860d0a 1637=item *
1638
1639Do similar modules already exist in some form?
f102b883 1640
1641If so, please try to reuse the existing modules either in whole or
1642by inheriting useful features into a new class. If this is not
1643practical try to get together with the module authors to work on
1644extending or enhancing the functionality of the existing modules.
1645A perfect example is the plethora of packages in perl4 for dealing
1646with command line options.
1647
1648If you are writing a module to expand an already existing set of
1649modules, please coordinate with the author of the package. It
1650helps if you follow the same naming scheme and module interaction
1651scheme as the original author.
1652
4e860d0a 1653=item *
1654
1655Try to design the new module to be easy to extend and reuse.
f102b883 1656
9f1b1f2d 1657Try to C<use warnings;> (or C<use warnings qw(...);>).
1658Remember that you can add C<no warnings qw(...);> to individual blocks
2e1d04bc 1659of code that need less warnings.
19799a22 1660
f102b883 1661Use blessed references. Use the two argument form of bless to bless
1662into the class name given as the first parameter of the constructor,
1663e.g.,:
1664
1665 sub new {
2e1d04bc 1666 my $class = shift;
1667 return bless {}, $class;
f102b883 1668 }
1669
1670or even this if you'd like it to be used as either a static
1671or a virtual method.
1672
1673 sub new {
2e1d04bc 1674 my $self = shift;
1675 my $class = ref($self) || $self;
1676 return bless {}, $class;
f102b883 1677 }
1678
1679Pass arrays as references so more parameters can be added later
1680(it's also faster). Convert functions into methods where
1681appropriate. Split large methods into smaller more flexible ones.
1682Inherit methods from other modules if appropriate.
1683
1684Avoid class name tests like: C<die "Invalid" unless ref $ref eq 'FOO'>.
19799a22 1685Generally you can delete the C<eq 'FOO'> part with no harm at all.
f102b883 1686Let the objects look after themselves! Generally, avoid hard-wired
1687class names as far as possible.
1688
c47ff5f1 1689Avoid C<< $r->Class::func() >> where using C<@ISA=qw(... Class ...)> and
1690C<< $r->func() >> would work (see L<perlbot> for more details).
f102b883 1691
1692Use autosplit so little used or newly added functions won't be a
5a964f20 1693burden to programs that don't use them. Add test functions to
f102b883 1694the module after __END__ either using AutoSplit or by saying:
1695
1696 eval join('',<main::DATA>) || die $@ unless caller();
1697
1698Does your module pass the 'empty subclass' test? If you say
19799a22 1699C<@SUBCLASS::ISA = qw(YOURCLASS);> your applications should be able
f102b883 1700to use SUBCLASS in exactly the same way as YOURCLASS. For example,
1701does your application still work if you change: C<$obj = new YOURCLASS;>
1702into: C<$obj = new SUBCLASS;> ?
1703
1704Avoid keeping any state information in your packages. It makes it
1705difficult for multiple other packages to use yours. Keep state
1706information in objects.
1707
2e1d04bc 1708Always use B<-w>.
19799a22 1709
1710Try to C<use strict;> (or C<use strict qw(...);>).
f102b883 1711Remember that you can add C<no strict qw(...);> to individual blocks
2e1d04bc 1712of code that need less strictness.
19799a22 1713
2e1d04bc 1714Always use B<-w>.
19799a22 1715
f102b883 1716Follow the guidelines in the perlstyle(1) manual.
1717
19799a22 1718Always use B<-w>.
1719
4e860d0a 1720=item *
1721
1722Some simple style guidelines
f102b883 1723
5a964f20 1724The perlstyle manual supplied with Perl has many helpful points.
f102b883 1725
1726Coding style is a matter of personal taste. Many people evolve their
1727style over several years as they learn what helps them write and
1728maintain good code. Here's one set of assorted suggestions that
1729seem to be widely used by experienced developers:
1730
1731Use underscores to separate words. It is generally easier to read
1732$var_names_like_this than $VarNamesLikeThis, especially for
1733non-native speakers of English. It's also a simple rule that works
1734consistently with VAR_NAMES_LIKE_THIS.
1735
1736Package/Module names are an exception to this rule. Perl informally
1737reserves lowercase module names for 'pragma' modules like integer
1738and strict. Other modules normally begin with a capital letter and
1739use mixed case with no underscores (need to be short and portable).
1740
1741You may find it helpful to use letter case to indicate the scope
1742or nature of a variable. For example:
1743
5a964f20 1744 $ALL_CAPS_HERE constants only (beware clashes with Perl vars)
f102b883 1745 $Some_Caps_Here package-wide global/static
1746 $no_caps_here function scope my() or local() variables
1747
1748Function and method names seem to work best as all lowercase.
c47ff5f1 1749e.g., C<< $obj->as_string() >>.
f102b883 1750
1751You can use a leading underscore to indicate that a variable or
1752function should not be used outside the package that defined it.
1753
4e860d0a 1754=item *
1755
1756Select what to export.
f102b883 1757
1758Do NOT export method names!
1759
1760Do NOT export anything else by default without a good reason!
1761
1762Exports pollute the namespace of the module user. If you must
1763export try to use @EXPORT_OK in preference to @EXPORT and avoid
1764short or common names to reduce the risk of name clashes.
1765
1766Generally anything not exported is still accessible from outside the
c47ff5f1 1767module using the ModuleName::item_name (or C<< $blessed_ref->method >>)
f102b883 1768syntax. By convention you can use a leading underscore on names to
1769indicate informally that they are 'internal' and not for public use.
1770
1771(It is actually possible to get private functions by saying:
1772C<my $subref = sub { ... }; &$subref;>. But there's no way to call that
1773directly as a method, because a method must have a name in the symbol
1774table.)
1775
1776As a general rule, if the module is trying to be object oriented
1777then export nothing. If it's just a collection of functions then
1778@EXPORT_OK anything but use @EXPORT with caution.
1779
4e860d0a 1780=item *
1781
1782Select a name for the module.
f102b883 1783
1784This name should be as descriptive, accurate, and complete as
1785possible. Avoid any risk of ambiguity. Always try to use two or
1786more whole words. Generally the name should reflect what is special
1787about what the module does rather than how it does it. Please use
1788nested module names to group informally or categorize a module.
1789There should be a very good reason for a module not to have a nested name.
1790Module names should begin with a capital letter.
1791
1792Having 57 modules all called Sort will not make life easy for anyone
1793(though having 23 called Sort::Quick is only marginally better :-).
1794Imagine someone trying to install your module alongside many others.
1795If in any doubt ask for suggestions in comp.lang.perl.misc.
1796
1797If you are developing a suite of related modules/classes it's good
1798practice to use nested classes with a common prefix as this will
1799avoid namespace clashes. For example: Xyz::Control, Xyz::View,
1800Xyz::Model etc. Use the modules in this list as a naming guide.
1801
1802If adding a new module to a set, follow the original author's
1803standards for naming modules and the interface to methods in
1804those modules.
1805
165c0277 1806If developing modules for private internal or project specific use,
1807that will never be released to the public, then you should ensure
1808that their names will not clash with any future public module. You
1809can do this either by using the reserved Local::* category or by
1810using a category name that includes an underscore like Foo_Corp::*.
1811
f102b883 1812To be portable each component of a module name should be limited to
181311 characters. If it might be used on MS-DOS then try to ensure each is
1814unique in the first 8 characters. Nested modules make this easier.
1815
4e860d0a 1816=item *
1817
1818Have you got it right?
f102b883 1819
1820How do you know that you've made the right decisions? Have you
1821picked an interface design that will cause problems later? Have
1822you picked the most appropriate name? Do you have any questions?
1823
1824The best way to know for sure, and pick up many helpful suggestions,
1825is to ask someone who knows. Comp.lang.perl.misc is read by just about
1826all the people who develop modules and it's the best place to ask.
1827
1828All you need to do is post a short summary of the module, its
1829purpose and interfaces. A few lines on each of the main methods is
1830probably enough. (If you post the whole module it might be ignored
1831by busy people - generally the very people you want to read it!)
1832
1833Don't worry about posting if you can't say when the module will be
1834ready - just say so in the message. It might be worth inviting
1835others to help you, they may be able to complete it for you!
1836
4e860d0a 1837=item *
1838
1839README and other Additional Files.
f102b883 1840
1841It's well known that software developers usually fully document the
1842software they write. If, however, the world is in urgent need of
1843your software and there is not enough time to write the full
1844documentation please at least provide a README file containing:
1845
1846=over 10
1847
1848=item *
4e860d0a 1849
f102b883 1850A description of the module/package/extension etc.
1851
1852=item *
4e860d0a 1853
f102b883 1854A copyright notice - see below.
1855
1856=item *
4e860d0a 1857
f102b883 1858Prerequisites - what else you may need to have.
1859
1860=item *
4e860d0a 1861
f102b883 1862How to build it - possible changes to Makefile.PL etc.
1863
1864=item *
4e860d0a 1865
f102b883 1866How to install it.
1867
1868=item *
4e860d0a 1869
f102b883 1870Recent changes in this release, especially incompatibilities
1871
1872=item *
4e860d0a 1873
f102b883 1874Changes / enhancements you plan to make in the future.
1875
1876=back
1877
1878If the README file seems to be getting too large you may wish to
1879split out some of the sections into separate files: INSTALL,
1880Copying, ToDo etc.
1881
1882=over 4
1883
1884=item Adding a Copyright Notice.
1885
4e860d0a 1886
f102b883 1887How you choose to license your work is a personal decision.
1888The general mechanism is to assert your Copyright and then make
1889a declaration of how others may copy/use/modify your work.
1890
1891Perl, for example, is supplied with two types of licence: The GNU
1892GPL and The Artistic Licence (see the files README, Copying, and
1893Artistic). Larry has good reasons for NOT just using the GNU GPL.
1894
1895My personal recommendation, out of respect for Larry, Perl, and the
5a964f20 1896Perl community at large is to state something simply like:
f102b883 1897
1898 Copyright (c) 1995 Your Name. All rights reserved.
1899 This program is free software; you can redistribute it and/or
1900 modify it under the same terms as Perl itself.
1901
1902This statement should at least appear in the README file. You may
1903also wish to include it in a Copying file and your source files.
1904Remember to include the other words in addition to the Copyright.
1905
4e860d0a 1906=item *
1907
1908Give the module a version/issue/release number.
f102b883 1909
1910To be fully compatible with the Exporter and MakeMaker modules you
1911should store your module's version number in a non-my package
1912variable called $VERSION. This should be a floating point
1913number with at least two digits after the decimal (i.e., hundredths,
1914e.g, C<$VERSION = "0.01">). Don't use a "1.3.2" style version.
19799a22 1915See L<Exporter> for details.
f102b883 1916
1917It may be handy to add a function or method to retrieve the number.
1918Use the number in announcements and archive file names when
1919releasing the module (ModuleName-1.02.tar.Z).
1920See perldoc ExtUtils::MakeMaker.pm for details.
1921
4e860d0a 1922=item *
1923
1924How to release and distribute a module.
f102b883 1925
1926It's good idea to post an announcement of the availability of your
1927module (or the module itself if small) to the comp.lang.perl.announce
1928Usenet newsgroup. This will at least ensure very wide once-off
1929distribution.
1930
2e1d04bc 1931If possible, register the module with CPAN. You should
f102b883 1932include details of its location in your announcement.
1933
1934Some notes about ftp archives: Please use a long descriptive file
5a964f20 1935name that includes the version number. Most incoming directories
f102b883 1936will not be readable/listable, i.e., you won't be able to see your
1937file after uploading it. Remember to send your email notification
1938message as soon as possible after uploading else your file may get
1939deleted automatically. Allow time for the file to be processed
1940and/or check the file has been processed before announcing its
1941location.
1942
1943FTP Archives for Perl Modules:
1944
6cecdcac 1945Follow the instructions and links on:
f102b883 1946
4e860d0a 1947 http://www.cpan.org/modules/00modlist.long.html
1948 http://www.cpan.org/modules/04pause.html
f102b883 1949
1950or upload to one of these sites:
1951
6cecdcac 1952 https://pause.kbx.de/pause/
1953 http://pause.perl.org/pause/
f102b883 1954
6cecdcac 1955and notify <modules@perl.org>.
f102b883 1956
1957By using the WWW interface you can ask the Upload Server to mirror
1958your modules from your ftp or WWW site into your own directory on
1959CPAN!
1960
1961Please remember to send me an updated entry for the Module list!
1962
4e860d0a 1963=item *
1964
1965Take care when changing a released module.
f102b883 1966
7b8d334a 1967Always strive to remain compatible with previous released versions.
1968Otherwise try to add a mechanism to revert to the
19799a22 1969old behavior if people rely on it. Document incompatible changes.
f102b883 1970
1971=back
1972
1973=back
1974
1975=head2 Guidelines for Converting Perl 4 Library Scripts into Modules
1976
1977=over 4
1978
4e860d0a 1979=item *
1980
1981There is no requirement to convert anything.
f102b883 1982
1983If it ain't broke, don't fix it! Perl 4 library scripts should
1984continue to work with no problems. You may need to make some minor
1985changes (like escaping non-array @'s in double quoted strings) but
1986there is no need to convert a .pl file into a Module for just that.
1987
4e860d0a 1988=item *
1989
1990Consider the implications.
f102b883 1991
5a964f20 1992All Perl applications that make use of the script will need to
f102b883 1993be changed (slightly) if the script is converted into a module. Is
1994it worth it unless you plan to make other changes at the same time?
1995
4e860d0a 1996=item *
1997
1998Make the most of the opportunity.
f102b883 1999
2000If you are going to convert the script to a module you can use the
19799a22 2001opportunity to redesign the interface. The guidelines for module
2002creation above include many of the issues you should consider.
f102b883 2003
4e860d0a 2004=item *
2005
2006The pl2pm utility will get you started.
f102b883 2007
2008This utility will read *.pl files (given as parameters) and write
2009corresponding *.pm files. The pl2pm utilities does the following:
2010
2011=over 10
2012
2013=item *
4e860d0a 2014
f102b883 2015Adds the standard Module prologue lines
2016
2017=item *
4e860d0a 2018
f102b883 2019Converts package specifiers from ' to ::
2020
2021=item *
4e860d0a 2022
f102b883 2023Converts die(...) to croak(...)
2024
2025=item *
4e860d0a 2026
f102b883 2027Several other minor changes
2028
2029=back
2030
2031Being a mechanical process pl2pm is not bullet proof. The converted
2032code will need careful checking, especially any package statements.
2033Don't delete the original .pl file till the new .pm one works!
2034
2035=back
2036
2037=head2 Guidelines for Reusing Application Code
2038
2039=over 4
2040
4e860d0a 2041=item *
551e1d92 2042
2043Complete applications rarely belong in the Perl Module Library.
f102b883 2044
4e860d0a 2045=item *
551e1d92 2046
2047Many applications contain some Perl code that could be reused.
f102b883 2048
2049Help save the world! Share your code in a form that makes it easy
2050to reuse.
2051
4e860d0a 2052=item *
551e1d92 2053
2054Break-out the reusable code into one or more separate module files.
f102b883 2055
4e860d0a 2056=item *
551e1d92 2057
2058Take the opportunity to reconsider and redesign the interfaces.
2059
4e860d0a 2060=item *
f102b883 2061
551e1d92 2062In some cases the 'application' can then be reduced to a small
f102b883 2063
2064fragment of code built on top of the reusable modules. In these cases
2065the application could invoked as:
2066
5a964f20 2067 % perl -e 'use Module::Name; method(@ARGV)' ...
f102b883 2068or
5a964f20 2069 % perl -mModule::Name ... (in perl5.002 or higher)
f102b883 2070
2071=back
2072
2073=head1 NOTE
2074
2075Perl does not enforce private and public parts of its modules as you may
2076have been used to in other languages like C++, Ada, or Modula-17. Perl
2077doesn't have an infatuation with enforced privacy. It would prefer
2078that you stayed out of its living room because you weren't invited, not
2079because it has a shotgun.
2080
2081The module and its user have a contract, part of which is common law,
2082and part of which is "written". Part of the common law contract is
2083that a module doesn't pollute any namespace it wasn't asked to. The
2084written contract for the module (A.K.A. documentation) may make other
2085provisions. But then you know when you C<use RedefineTheWorld> that
2086you're redefining the world and willing to take the consequences.