2 Generated by perlmodlib.PL -- DO NOT EDIT!
6 perlmodlib - constructing new Perl modules and finding existing ones
8 =head1 THE PERL MODULE LIBRARY
10 Many modules are included in the Perl distribution. These are described
11 below, and all end in F<.pm>. You may discover compiled library
12 files (usually ending in F<.so>) or small pieces of modules to be
13 autoloaded (ending in F<.al>); these were automatically generated
14 by the installation process. You may also discover files in the
15 library directory that end in either F<.pl> or F<.ph>. These are
16 old libraries supplied so that old programs that use them still
17 run. The F<.pl> files will all eventually be converted into standard
18 modules, and the F<.ph> files made by B<h2ph> will probably end up
19 as extension modules made by B<h2xs>. (Some F<.ph> values may
20 already be available through the POSIX, Errno, or Fcntl modules.)
21 The B<pl2pm> file in the distribution may help in your conversion,
22 but it's just a mechanical process and therefore far from bulletproof.
24 =head2 Pragmatic Modules
26 They work somewhat like compiler directives (pragmata) in that they
27 tend to affect the compilation of your program, and thus will usually
28 work well only when used within a C<use>, or C<no>. Most of these
29 are lexically scoped, so an inner BLOCK may countermand them
36 which lasts until the end of that BLOCK.
38 Some pragmas are lexically scoped--typically those that affect the
39 C<$^H> hints variable. Others affect the current package instead,
40 like C<use vars> and C<use subs>, which allow you to predeclare a
41 variables or subroutines within a particular I<file> rather than
42 just a block. Such declarations are effective for the entire file
43 for which they were declared. You cannot rescind them with C<no
46 The following pragmas are defined (and have their own documentation).
52 Select assertions in blocks of code
54 =item assertions::activate
60 Get/set subroutine or variable attributes
64 Set/get attributes of a subroutine (deprecated)
68 Postpone load of modules until a function is used
72 Establish IS-A relationship with base classes at compile time
76 Transparent BigInteger support for Perl
80 Transparent BigNumber support for Perl
84 Transparent BigNumber/BigRational support for Perl
88 Use MakeMaker's uninstalled version of a package
92 Force byte semantics rather than character semantics
96 Define character names for C<\N{named}> string literal escapes
104 Produce verbose warning diagnostics
108 Allows you to write your script in non-ascii or non-utf8
110 =item encoding::warnings
112 Warn on implicit encoding conversions
116 Compile-time class fields
120 Control the filetest permission operators
124 C<use> a Perl module if a condition holds
128 Use integer arithmetic instead of floating point
132 Request less of something from the compiler
136 Manipulate @INC at compile time
140 Use and avoid POSIX locales for built-in operations
144 Set default PerlIO layers for input and output
148 Restrict unsafe operations when compiling
152 Package for overloading perl operations
156 Alter regular expression behaviour
160 Enable simple signal handling
164 Control sort() behaviour
168 Restrict unsafe constructs
176 Perl extension allowing use of interpreter based threads from perl
178 =item threads::shared
180 Perl extension for sharing data structures between threads
184 Enable/disable UTF-8 (or UTF-EBCDIC) in source code
188 Predeclare global variable names (obsolete)
192 Perl extension for Version Objects
196 Control VMS-specific language features
200 Control optional warnings
202 =item warnings::register
204 Warnings import function
208 =head2 Standard Modules
210 Standard, bundled modules are all expected to behave in a well-defined
211 manner with respect to namespace pollution because they use the
212 Exporter module. See their own documentation for details.
214 It's possible that not all modules listed below are installed on your
215 system. For example, the GDBM_File module will not be installed if you
216 don't have the gdbm library.
222 Provide framework for multiple DBMs
224 =item Attribute::Handlers
226 Simpler definition of attribute handlers
230 Load subroutines only on demand
234 Split a package for autoloading
242 Autogenerated data about Perl ops, used to generate bytecode
246 Assemble Perl bytecode
254 Perl compiler's bytecode backend
258 Perl compiler's C backend
262 Perl compiler's optimized C translation backend
266 Walk Perl syntax tree, printing concise info about ops
270 Walk Perl syntax tree, printing debug info about ops
274 Perl compiler backend to produce perl code
276 =item B::Disassembler
278 Disassemble Perl bytecode
286 Show lexical variables used in functions or files
290 Helper module for CC backend
294 Show what stashes are loaded
298 Walk Perl syntax tree, printing terse info about ops
302 Generates cross reference reports for Perl programs
306 Benchmark running times of Perl code
310 Load byte compiled perl code
314 Simple Common Gateway Interface Class
318 Backward compatibility module for CGI.pm
322 CGI routines for writing to the HTTPD (or other) error log
326 Interface to Netscape Cookies
330 CGI Interface for Fast CGI
334 Module to produce nicely formatted HTML code
338 Simple Interface to Server Push
342 Backward compatibility module for defunct CGI::Switch
346 Internal utilities used by CGI module
350 Query, download and build perl modules from CPAN sites
352 =item CPAN::FirstTime
354 Utility for CPAN::Config file Initialization
358 Wrapper around CPAN.pm without using any XS module
362 Warn of errors (from perspective of caller)
366 Heavy machinery, no user serviceable parts inside
370 Report the search path for a class's ISA tree
374 Declare struct-like datatypes as Perl classes
378 Access Perl configuration information
382 Get pathname of current working directory
386 Programmatic interface to the Perl debugging API (draft, subject to
390 Filter DBM keys/values
394 Perl5 access to Berkeley DB version 1.x
398 Stringified perl data structures, suitable for both printing and C<eval>
406 Perl/Pollution/Portability
410 A data debugging tool for the XS programmer
412 =item Devel::SelfStubber
414 Generate stubs for a SelfLoading module
418 Modules that calculate message digests
422 Perl interface to the MD5 Algorithm
430 Calculate digests of files
434 Supply object methods for directory handles
438 Provides screen dump of Perl data.
442 Dynamically load C libraries into Perl code
450 Alias definitions to encodings
454 Single Byte Encodings
456 =item Encode::CJKConstants
458 Internally used by Encode::??::ISO_2022_*
462 China-based Chinese Encodings
466 Internally used by Encode::CN
470 Internally used by Encode
476 =item Encode::Encoder
478 Object Oriented Encoder
480 =item Encode::Encoding
482 Encode Implementation Base Class
486 Guesses encoding from data
492 =item Encode::JP::H2Z
494 Internally used by Encode::JP::2022_JP*
496 =item Encode::JP::JIS7
498 Internally used by Encode::JP
504 =item Encode::KR::2022_KR
506 Internally used by Encode::KR
508 =item Encode::MIME::Header
510 MIME 'B' and 'Q' header encoding
514 A detailed document on Encode and PerlIO
516 =item Encode::Supported
518 Encodings supported by Encode
526 Taiwan-based Chinese Encodings
528 =item Encode::Unicode
530 Various Unicode Transformation Formats
532 =item Encode::Unicode::UTF7
538 Use nice English (or awk) names for ugly punctuation variables
542 Perl module that imports environment variables as scalars or arrays
546 System errno constants
550 Implements default import method for modules
552 =item Exporter::Heavy
556 =item ExtUtils::Command
558 Utilities to replace common UNIX commands in Makefiles etc.
560 =item ExtUtils::Command::MM
562 Commands for the MM's to use in Makefiles
564 =item ExtUtils::Constant
566 Generate XS code to import C header constants
568 =item ExtUtils::Constant::Base
570 Base class for ExtUtils::Constant objects
572 =item ExtUtils::Constant::Utils
574 Helper functions for ExtUtils::Constant
576 =item ExtUtils::Constant::XS
578 Base class for ExtUtils::Constant objects
580 =item ExtUtils::Embed
582 Utilities for embedding Perl in C/C++ applications
584 =item ExtUtils::Install
586 Install files from here to there
588 =item ExtUtils::Installed
590 Inventory management of installed modules
592 =item ExtUtils::Liblist
594 Determine libraries to use and how to use them
598 OS adjusted ExtUtils::MakeMaker subclass
600 =item ExtUtils::MM_Any
602 Platform-agnostic MM methods
604 =item ExtUtils::MM_BeOS
606 Methods to override UN*X behaviour in ExtUtils::MakeMaker
608 =item ExtUtils::MM_Cygwin
610 Methods to override UN*X behaviour in ExtUtils::MakeMaker
612 =item ExtUtils::MM_DOS
614 DOS specific subclass of ExtUtils::MM_Unix
616 =item ExtUtils::MM_MacOS
618 Once produced Makefiles for MacOS Classic
620 =item ExtUtils::MM_NW5
622 Methods to override UN*X behaviour in ExtUtils::MakeMaker
624 =item ExtUtils::MM_OS2
626 Methods to override UN*X behaviour in ExtUtils::MakeMaker
628 =item ExtUtils::MM_UWIN
630 U/WIN specific subclass of ExtUtils::MM_Unix
632 =item ExtUtils::MM_Unix
634 Methods used by ExtUtils::MakeMaker
636 =item ExtUtils::MM_VMS
638 Methods to override UN*X behaviour in ExtUtils::MakeMaker
640 =item ExtUtils::MM_Win32
642 Methods to override UN*X behaviour in ExtUtils::MakeMaker
644 =item ExtUtils::MM_Win95
646 Method to customize MakeMaker for Win9X
650 ExtUtils::MakeMaker subclass for customization
652 =item ExtUtils::MakeMaker
654 Create a module Makefile
656 =item ExtUtils::MakeMaker::FAQ
658 Frequently Asked Questions About MakeMaker
660 =item ExtUtils::MakeMaker::Tutorial
662 Writing a module with MakeMaker
664 =item ExtUtils::MakeMaker::bytes
666 Version-agnostic bytes.pm
668 =item ExtUtils::MakeMaker::vmsish
670 Platform-agnostic vmsish.pm
672 =item ExtUtils::Manifest
674 Utilities to write and check a MANIFEST file
676 =item ExtUtils::Mkbootstrap
678 Make a bootstrap file for use by DynaLoader
680 =item ExtUtils::Mksymlists
682 Write linker options files for dynamic extension
684 =item ExtUtils::Packlist
686 Manage .packlist files
688 =item ExtUtils::testlib
690 Add blib/* directories to @INC
694 Replace functions with equivalents which succeed or die
698 Load the C Fcntl.h defines
702 Split a pathname into pieces
704 =item File::CheckTree
706 Run many filetest checks on a tree
710 Compare files or filehandles
714 Copy files or filehandles
718 DOS like globbing and then some
722 Traverse a directory tree.
726 Perl extension for BSD glob routine
730 Create or remove directory trees
734 Portably perform operations on file names
736 =item File::Spec::Cygwin
738 Methods for Cygwin file specs
740 =item File::Spec::Epoc
742 Methods for Epoc file specs
744 =item File::Spec::Functions
746 Portably perform operations on file names
748 =item File::Spec::Mac
750 File::Spec for Mac OS (Classic)
752 =item File::Spec::OS2
754 Methods for OS/2 file specs
756 =item File::Spec::Unix
758 File::Spec for Unix, base for other File::Spec modules
760 =item File::Spec::VMS
762 Methods for VMS file specs
764 =item File::Spec::Win32
766 Methods for Win32 file specs
770 Return name and handle of a temporary file safely
774 By-name interface to Perl's built-in stat() functions
778 Keep more files open than the system permits
782 Supply object methods for filehandles
786 Simplified source filtering
788 =item Filter::Util::Call
790 Perl Source Filter Utility Module
794 Locate directory of original perl script
798 Perl5 access to the gdbm library.
802 Extended processing of command line options
806 Process single-character switches with switch clustering
810 A selection of general-utility hash subroutines
814 Compare 8-bit scalar data according to the current locale
818 Functions for dealing with RFC3066-style language tags
820 =item I18N::LangTags::Detect
822 Detect the user's language preferences
824 =item I18N::LangTags::List
826 Tags and names for human languages
830 Query locale information
834 Load various IO modules
838 Supply object methods for directory handles
842 Supply object methods for filehandles
846 Supply object methods for I/O handles
850 Supply object methods for pipes
854 Object interface to system poll call
858 Supply seek based methods for I/O objects
862 OO interface to the select system call
866 Object interface to socket communications
868 =item IO::Socket::INET
870 Object interface for AF_INET domain sockets
872 =item IO::Socket::UNIX
874 Object interface for AF_UNIX domain sockets
878 Open a process for both reading and writing
882 Open a process for reading, writing, and error handling
890 SysV Msg IPC object class
892 =item IPC::SysV::Semaphore
894 SysV Semaphore IPC object class
898 A selection of general-utility list subroutines
900 =item Locale::Constants
902 Constants for Locale codes
904 =item Locale::Country
906 ISO codes for country identification (ISO 3166)
908 =item Locale::Currency
910 ISO three letter codes for currency identification (ISO 4217)
912 =item Locale::Language
914 ISO two letter codes for language identification (ISO 639)
916 =item Locale::Maketext
918 Framework for localization
920 =item Locale::Maketext::TPJ13
922 Article about software localization
926 ISO codes for script identification (ISO 15924)
930 Encoding and decoding of base64 strings
932 =item MIME::Base64::QuotedPrint
934 Encoding and decoding of quoted-printable strings
938 Arbitrary size floating point math package
942 Arbitrary size integer math package
944 =item Math::BigInt::Calc
946 Pure Perl module to support Math::BigInt
948 =item Math::BigInt::CalcEmu
950 Emulate low-level math with BigInt code
954 Arbitrary big rational numbers
958 Complex numbers and associated mathematical functions
962 Trigonometric functions
966 Make functions faster by trading space for time
968 =item Memoize::AnyDBM_File
970 Glue to provide EXISTS for AnyDBM_File for Storable use
972 =item Memoize::Expire
974 Plug-in module for automatic expiration of memoized values
976 =item Memoize::ExpireFile
978 Test for Memoize expiration semantics
980 =item Memoize::ExpireTest
982 Test for Memoize expiration semantics
984 =item Memoize::NDBM_File
986 Glue to provide EXISTS for NDBM_File for Storable use
988 =item Memoize::SDBM_File
990 Glue to provide EXISTS for SDBM_File for Storable use
992 =item Memoize::Storable
994 Store Memoized data in Storable database
996 =item Module::CoreList
998 What modules shipped with versions of perl
1002 Tied access to ndbm files
1006 Provide a pseudo-class NEXT (et al) that allows method redispatch
1010 Network Command class (as used by FTP, SMTP etc)
1014 Local configuration data for libnet
1018 Attempt to evaluate the current host's internet name and domain
1030 OO interface to users netrc file
1034 Post Office Protocol 3 Client class (RFC1939)
1038 Check a remote host for reachability
1042 Simple Mail Transfer Protocol Client
1046 Time and daytime network client interface
1050 By-name interface to Perl's built-in gethost*() functions
1052 =item Net::libnetFAQ
1054 Libnet Frequently Asked Questions
1058 By-name interface to Perl's built-in getnet*() functions
1062 By-name interface to Perl's built-in getproto*() functions
1066 By-name interface to Perl's built-in getserv*() functions
1070 Generic interface to Perl Compiler backends
1074 Tied access to odbm files
1078 Disable named opcodes when compiling perl code
1082 Perl interface to IEEE Std 1003.1
1086 On demand loader for PerlIO layers and root of PerlIO::* name space
1088 =item PerlIO::encoding
1092 =item PerlIO::scalar
1094 In-memory IO, scalar IO
1098 Helper class for PerlIO layers implemented in perl
1100 =item PerlIO::via::QuotedPrint
1102 PerlIO layer for quoted-printable strings
1106 Check pod documents for syntax errors
1110 Find POD documents in directory trees
1112 =item Pod::Functions
1114 Group Perl's functions a la perlfunc.pod
1118 Module to convert pod files to HTML
1120 =item Pod::InputObjects
1122 Objects representing POD input paragraphs, commands, etc.
1126 Convert Pod data to formatted Latex
1130 Convert POD data to formatted *roff input
1132 =item Pod::ParseLink
1134 Parse an LE<lt>E<gt> formatting code in POD text
1136 =item Pod::ParseUtils
1138 Helpers for POD parsing and conversion
1142 Base class for creating POD filters and translators
1144 =item Pod::Perldoc::ToChecker
1146 Let Perldoc check Pod for errors
1148 =item Pod::Perldoc::ToMan
1150 Let Perldoc render Pod as man pages
1152 =item Pod::Perldoc::ToNroff
1154 Let Perldoc convert Pod to nroff
1156 =item Pod::Perldoc::ToPod
1158 Let Perldoc render Pod as ... Pod!
1160 =item Pod::Perldoc::ToRtf
1162 Let Perldoc render Pod as RTF
1164 =item Pod::Perldoc::ToText
1166 Let Perldoc render Pod as plaintext
1168 =item Pod::Perldoc::ToTk
1170 Let Perldoc use Tk::Pod to render Pod
1172 =item Pod::Perldoc::ToXml
1174 Let Perldoc render Pod as XML
1176 =item Pod::PlainText
1178 Convert POD data to formatted ASCII text
1182 Perl extension for converting Pod to old style Pod.
1186 Extract selected sections of POD from input
1190 Convert POD data to formatted ASCII text
1192 =item Pod::Text::Color
1194 Convert POD data to formatted color ASCII text
1196 =item Pod::Text::Overstrike
1198 Convert POD data to formatted overstrike text
1200 =item Pod::Text::Termcap
1202 Convert POD data to ASCII text with format escapes
1206 Print a usage message from embedded pod documentation
1210 Tied access to sdbm files
1214 Compile and execute code in restricted compartments
1218 A selection of general-utility scalar subroutines
1222 Search for key in dictionary file
1226 Save and restore selected file handle
1230 Load functions only on demand
1234 Run shell commands transparently within perl
1238 Load the C socket.h defines and structure manipulators
1242 Persistence for Perl data structures
1246 A switch statement for Perl
1250 Manipulate Perl symbols and their names
1254 Try every conceivable way to get hostname
1258 Perl interface to the UNIX syslog(3) calls
1260 =item Term::ANSIColor
1262 Color screen output using ANSI escape sequences
1266 Perl termcap interface
1268 =item Term::Complete
1270 Perl word completion module
1272 =item Term::ReadLine
1274 Perl interface to various C<readline> packages.
1278 Provides a simple framework for writing test scripts
1282 Backend for building test libraries
1286 Run Perl standard test scripts with statistics
1288 =item Test::Harness::Assert
1292 =item Test::Harness::Iterator
1294 Internal Test::Harness Iterator
1296 =item Test::Harness::Straps
1298 Detailed analysis of test results
1300 =item Test::Harness::TAP
1302 Documentation for the TAP format
1306 Yet another framework for writing test scripts
1310 Basic utilities for writing tests.
1312 =item Test::Tutorial
1314 A tutorial about writing really basic tests
1318 Create an abbreviation table from a list
1320 =item Text::Balanced
1322 Extract delimited text sequences from strings.
1324 =item Text::ParseWords
1326 Parse text into an array of tokens or array of arrays
1330 Implementation of the Soundex Algorithm as Described by Knuth
1334 Expand and unexpand tabs per the unix expand(1) and unexpand(1)
1338 Line wrapping to form simple paragraphs
1342 Manipulate threads in Perl (for old code only)
1348 =item Thread::Semaphore
1350 Thread-safe semaphores
1352 =item Thread::Signal
1354 Start a thread which runs signal handlers reliably (for old code)
1356 =item Thread::Specific
1358 Thread-specific keys
1362 Base class for tied arrays
1366 Access the lines of a disk file via a Perl array
1370 Base class definitions for tied handles
1374 Base class definitions for tied hashes
1378 Add data to hash when needed
1382 Use references as hash keys
1386 Base class definitions for tied scalars
1388 =item Tie::SubstrHash
1390 Fixed-table-size, fixed-key-length hashing
1394 High resolution alarm, sleep, gettimeofday, interval timers
1398 Efficiently compute time from local and GMT time
1402 By-name interface to Perl's built-in gmtime() function
1404 =item Time::localtime
1406 By-name interface to Perl's built-in localtime() function
1410 Internal object used by Time::gmtime and Time::localtime
1414 Base class for ALL classes (blessed references)
1416 =item Unicode::Collate
1418 Unicode Collation Algorithm
1420 =item Unicode::Normalize
1422 Unicode Normalization Forms
1426 Unicode character database
1430 By-name interface to Perl's built-in getgr*() functions
1434 By-name interface to Perl's built-in getpw*() functions
1442 Module to test the XS typemaps distributed with perl
1446 Dynamically load C libraries into Perl code
1450 To find out I<all> modules installed on your system, including
1451 those without documentation or outside the standard release,
1452 just use the following command (under the default win32 shell,
1453 double quotes should be used instead of single quotes).
1455 % perl -MFile::Find=find -MFile::Spec::Functions -Tlwe \
1456 'find { wanted => sub { print canonpath $_ if /\.pm\z/ },
1457 no_chdir => 1 }, @INC'
1459 (The -T is here to prevent '.' from being listed in @INC.)
1460 They should all have their own documentation installed and accessible
1461 via your system man(1) command. If you do not have a B<find>
1462 program, you can use the Perl B<find2perl> program instead, which
1463 generates Perl code as output you can run through perl. If you
1464 have a B<man> program but it doesn't find your modules, you'll have
1465 to fix your manpath. See L<perl> for details. If you have no
1466 system B<man> command, you might try the B<perldoc> program.
1468 Note also that the command C<perldoc perllocal> gives you a (possibly
1469 incomplete) list of the modules that have been further installed on
1470 your system. (The perllocal.pod file is updated by the standard MakeMaker
1473 =head2 Extension Modules
1475 Extension modules are written in C (or a mix of Perl and C). They
1476 are usually dynamically loaded into Perl if and when you need them,
1477 but may also be linked in statically. Supported extension modules
1478 include Socket, Fcntl, and POSIX.
1480 Many popular C extension modules do not come bundled (at least, not
1481 completely) due to their sizes, volatility, or simply lack of time
1482 for adequate testing and configuration across the multitude of
1483 platforms on which Perl was beta-tested. You are encouraged to
1484 look for them on CPAN (described below), or using web search engines
1485 like Alta Vista or Google.
1489 CPAN stands for Comprehensive Perl Archive Network; it's a globally
1490 replicated trove of Perl materials, including documentation, style
1491 guides, tricks and traps, alternate ports to non-Unix systems and
1492 occasional binary distributions for these. Search engines for
1493 CPAN can be found at http://www.cpan.org/
1495 Most importantly, CPAN includes around a thousand unbundled modules,
1496 some of which require a C compiler to build. Major categories of
1503 Language Extensions and Documentation Tools
1511 Operating System Interfaces
1515 Networking, Device Control (modems) and InterProcess Communication
1519 Data Types and Data Type Utilities
1531 Interfaces to / Emulations of Other Programming Languages
1535 File Names, File Systems and File Locking (see also File Handles)
1539 String Processing, Language Text Processing, Parsing, and Searching
1543 Option, Argument, Parameter, and Configuration File Processing
1547 Internationalization and Locale
1551 Authentication, Security, and Encryption
1555 World Wide Web, HTML, HTTP, CGI, MIME
1559 Server and Daemon Utilities
1563 Archiving and Compression
1567 Images, Pixmap and Bitmap Manipulation, Drawing, and Graphing
1571 Mail and Usenet News
1575 Control Flow Utilities (callbacks and exceptions etc)
1579 File Handle and Input/Output Stream Utilities
1583 Miscellaneous Modules
1587 The list of the registered CPAN sites as of this writing follows.
1588 Please note that the sorting order is alphabetical on fields:
1594 |-->[state/province]
1600 and thus the North American servers happen to be listed between the
1601 European and the South American sites.
1603 You should try to choose one close to you.
1611 http://ftp.rucus.ru.ac.za/pub/perl/CPAN/
1612 ftp://ftp.rucus.ru.ac.za/pub/perl/CPAN/
1613 ftp://ftp.is.co.za/programming/perl/CPAN/
1614 ftp://ftp.saix.net/pub/CPAN/
1615 ftp://ftp.sun.ac.za/CPAN/CPAN/
1625 http://cpan.linuxforum.net/
1626 http://cpan.shellhung.org/
1627 ftp://ftp.shellhung.org/pub/CPAN
1628 ftp://mirrors.hknet.com/CPAN
1632 http://mirrors.tf.itb.ac.id/cpan/
1633 http://cpan.cbn.net.id/
1634 ftp://ftp.cbn.net.id/mirror/CPAN
1638 ftp://ftp.iglu.org.il/pub/CPAN/
1639 http://cpan.lerner.co.il/
1640 http://bioinfo.weizmann.ac.il/pub/software/perl/CPAN/
1641 ftp://bioinfo.weizmann.ac.il/pub/software/perl/CPAN/
1645 ftp://ftp.u-aizu.ac.jp/pub/CPAN
1646 ftp://ftp.kddlabs.co.jp/CPAN/
1647 ftp://ftp.ayamura.org/pub/CPAN/
1648 ftp://ftp.jaist.ac.jp/pub/lang/perl/CPAN/
1650 ftp://ftp.cpan.jp/CPAN/
1651 ftp://ftp.dti.ad.jp/pub/lang/CPAN/
1652 ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/
1656 http://cpan.MyBSD.org.my
1657 http://mirror.leafbug.org/pub/CPAN
1658 http://ossig.mncc.com.my/mirror/pub/CPAN
1660 =item Russian Federation
1662 http://cpan.tomsk.ru
1663 ftp://cpan.tomsk.ru/
1667 ftp://ftp.isu.net.sa/pub/CPAN/
1671 http://CPAN.en.com.sg/
1672 ftp://cpan.en.com.sg/
1673 http://mirror.averse.net/pub/CPAN
1674 ftp://mirror.averse.net/pub/CPAN
1675 http://cpan.oss.eznetsols.org
1676 ftp://ftp.oss.eznetsols.org/cpan
1680 http://CPAN.bora.net/
1681 ftp://ftp.bora.net/pub/CPAN/
1682 http://mirror.kr.FreeBSD.org/CPAN
1683 ftp://ftp.kr.FreeBSD.org/pub/CPAN
1687 ftp://ftp.nctu.edu.tw/UNIX/perl/CPAN
1688 http://cpan.cdpa.nsysu.edu.tw/
1689 ftp://cpan.cdpa.nsysu.edu.tw/pub/CPAN
1690 http://ftp.isu.edu.tw/pub/CPAN
1691 ftp://ftp.isu.edu.tw/pub/CPAN
1692 ftp://ftp1.sinica.edu.tw/pub1/perl/CPAN/
1693 http://ftp.tku.edu.tw/pub/CPAN/
1694 ftp://ftp.tku.edu.tw/pub/CPAN/
1698 ftp://ftp.loxinfo.co.th/pub/cpan/
1699 ftp://ftp.cs.riubon.ac.th/pub/mirrors/CPAN/
1703 =head2 Central America
1709 http://ftp.ucr.ac.cr/Unix/CPAN/
1710 ftp://ftp.ucr.ac.cr/pub/Unix/CPAN/
1720 http://cpan.inode.at/
1722 ftp://ftp.tuwien.ac.at/pub/CPAN/
1726 http://ftp.easynet.be/pub/CPAN/
1727 ftp://ftp.easynet.be/pub/CPAN/
1728 http://cpan.skynet.be
1729 ftp://ftp.cpan.skynet.be/pub/CPAN
1730 ftp://ftp.kulnet.kuleuven.ac.be/pub/mirror/CPAN/
1732 =item Bosnia and Herzegovina
1734 http://cpan.blic.net/
1738 http://cpan.online.bg
1739 ftp://cpan.online.bg/cpan
1740 http://cpan.zadnik.org
1741 ftp://ftp.zadnik.org/mirrors/CPAN/
1742 http://cpan.lirex.net/
1743 ftp://ftp.lirex.net/pub/mirrors/CPAN
1747 http://ftp.linux.hr/pub/CPAN/
1748 ftp://ftp.linux.hr/pub/CPAN/
1750 =item Czech Republic
1752 ftp://ftp.fi.muni.cz/pub/CPAN/
1753 ftp://sunsite.mff.cuni.cz/MIRRORS/ftp.funet.fi/pub/languages/perl/CPAN/
1757 http://mirrors.sunsite.dk/cpan/
1758 ftp://sunsite.dk/mirrors/cpan/
1759 http://cpan.cybercity.dk
1760 http://www.cpan.dk/CPAN/
1761 ftp://www.cpan.dk/ftp.cpan.org/CPAN/
1765 ftp://ftp.ut.ee/pub/languages/perl/CPAN/
1769 ftp://ftp.funet.fi/pub/languages/perl/CPAN/
1770 http://mirror.eunet.fi/CPAN
1774 http://www.enstimac.fr/Perl/CPAN
1775 http://ftp.u-paris10.fr/perl/CPAN
1776 ftp://ftp.u-paris10.fr/perl/CPAN
1777 http://cpan.mirrors.easynet.fr/
1778 ftp://cpan.mirrors.easynet.fr/pub/ftp.cpan.org/
1779 ftp://ftp.club-internet.fr/pub/perl/CPAN/
1781 ftp://ftp.lip6.fr/pub/perl/CPAN/
1782 ftp://ftp.oleane.net/pub/mirrors/CPAN/
1783 ftp://ftp.pasteur.fr/pub/computing/CPAN/
1784 http://mir2.ovh.net/ftp.cpan.org
1785 ftp://mir1.ovh.net/ftp.cpan.org
1786 http://ftp.crihan.fr/mirrors/ftp.cpan.org/
1787 ftp://ftp.crihan.fr/mirrors/ftp.cpan.org/
1788 http://ftp.u-strasbg.fr/CPAN
1789 ftp://ftp.u-strasbg.fr/CPAN
1790 ftp://cpan.cict.fr/pub/CPAN/
1791 ftp://ftp.uvsq.fr/pub/perl/CPAN/
1795 ftp://ftp.rub.de/pub/CPAN/
1796 ftp://ftp.freenet.de/pub/ftp.cpan.org/pub/CPAN/
1797 ftp://ftp.uni-erlangen.de/pub/source/CPAN/
1798 ftp://ftp-stud.fht-esslingen.de/pub/Mirrors/CPAN
1799 http://pandemonium.tiscali.de/pub/CPAN/
1800 ftp://pandemonium.tiscali.de/pub/CPAN/
1801 http://ftp.gwdg.de/pub/languages/perl/CPAN/
1802 ftp://ftp.gwdg.de/pub/languages/perl/CPAN/
1803 ftp://ftp.uni-hamburg.de/pub/soft/lang/perl/CPAN/
1804 ftp://ftp.leo.org/pub/CPAN/
1805 http://cpan.noris.de/
1806 ftp://cpan.noris.de/pub/CPAN/
1807 ftp://ftp.mpi-sb.mpg.de/pub/perl/CPAN/
1808 ftp://ftp.gmd.de/mirrors/CPAN/
1812 ftp://ftp.acn.gr/pub/lang/perl
1813 ftp://ftp.forthnet.gr/pub/languages/perl/CPAN
1814 ftp://ftp.ntua.gr/pub/lang/perl/
1818 http://ftp.kfki.hu/packages/perl/CPAN/
1819 ftp://ftp.kfki.hu/pub/packages/perl/CPAN/
1823 http://ftp.rhnet.is/pub/CPAN/
1824 ftp://ftp.rhnet.is/pub/CPAN/
1828 http://cpan.indigo.ie/
1829 ftp://cpan.indigo.ie/pub/CPAN/
1830 http://ftp.heanet.ie/mirrors/ftp.perl.org/pub/CPAN
1831 ftp://ftp.heanet.ie/mirrors/ftp.perl.org/pub/CPAN
1832 http://sunsite.compapp.dcu.ie/pub/perl/
1833 ftp://sunsite.compapp.dcu.ie/pub/perl/
1837 http://cpan.nettuno.it/
1838 http://gusp.dyndns.org/CPAN/
1839 ftp://gusp.dyndns.org/pub/CPAN
1840 http://softcity.iol.it/cpan
1841 ftp://softcity.iol.it/pub/cpan
1842 ftp://ftp.unina.it/pub/Other/CPAN/CPAN/
1843 ftp://ftp.unipi.it/pub/mirror/perl/CPAN/
1844 ftp://cis.uniRoma2.it/CPAN/
1845 ftp://ftp.edisontel.it/pub/CPAN_Mirror/
1846 http://cpan.flashnet.it/
1847 ftp://ftp.flashnet.it/pub/CPAN/
1851 http://kvin.lv/pub/CPAN/
1855 ftp://ftp.unix.lt/pub/CPAN/
1859 ftp://download.xs4all.nl/pub/mirror/CPAN/
1860 ftp://ftp.nl.uu.net/pub/CPAN/
1861 ftp://ftp.nluug.nl/pub/languages/perl/CPAN/
1862 http://cpan.cybercomm.nl/
1863 ftp://mirror.cybercomm.nl/pub/CPAN
1864 ftp://mirror.vuurwerk.nl/pub/CPAN/
1865 ftp://ftp.cpan.nl/pub/CPAN/
1866 http://ftp.easynet.nl/mirror/CPAN
1867 ftp://ftp.easynet.nl/mirror/CPAN
1868 http://archive.cs.uu.nl/mirror/CPAN/
1869 ftp://ftp.cs.uu.nl/mirror/CPAN/
1873 ftp://ftp.uninett.no/pub/languages/perl/CPAN
1874 ftp://ftp.uit.no/pub/languages/perl/cpan/
1878 ftp://ftp.mega.net.pl/CPAN
1879 ftp://ftp.man.torun.pl/pub/doc/CPAN/
1880 ftp://sunsite.icm.edu.pl/pub/CPAN/
1884 ftp://ftp.ua.pt/pub/CPAN/
1885 ftp://perl.di.uminho.pt/pub/CPAN/
1886 http://cpan.dei.uc.pt/
1887 ftp://ftp.dei.uc.pt/pub/CPAN
1888 ftp://ftp.nfsi.pt/pub/CPAN
1889 http://ftp.linux.pt/pub/mirrors/CPAN
1890 ftp://ftp.linux.pt/pub/mirrors/CPAN
1892 ftp://cpan.ip.pt/pub/cpan/
1893 http://cpan.telepac.pt/
1894 ftp://ftp.telepac.pt/pub/cpan/
1898 ftp://ftp.bio-net.ro/pub/CPAN
1899 ftp://ftp.kappa.ro/pub/mirrors/ftp.perl.org/pub/CPAN/
1900 ftp://ftp.lug.ro/CPAN
1901 ftp://ftp.roedu.net/pub/CPAN/
1902 ftp://ftp.dntis.ro/pub/cpan/
1903 ftp://ftp.iasi.roedu.net/pub/mirrors/ftp.cpan.org/
1904 http://cpan.ambra.ro/
1905 ftp://ftp.ambra.ro/pub/CPAN
1906 ftp://ftp.dnttm.ro/pub/CPAN/
1907 ftp://ftp.lasting.ro/pub/CPAN
1908 ftp://ftp.timisoara.roedu.net/mirrors/CPAN/
1912 ftp://ftp.chg.ru/pub/lang/perl/CPAN/
1913 http://cpan.rinet.ru/
1914 ftp://cpan.rinet.ru/pub/mirror/CPAN/
1915 ftp://ftp.aha.ru/pub/CPAN/
1916 ftp://ftp.corbina.ru/pub/CPAN/
1917 http://cpan.sai.msu.ru/
1918 ftp://ftp.sai.msu.su/pub/lang/perl/CPAN/
1922 ftp://ftp.cvt.stuba.sk/pub/CPAN/
1926 ftp://ftp.arnes.si/software/perl/CPAN/
1930 http://cpan.imasd.elmundo.es/
1931 ftp://ftp.rediris.es/mirror/CPAN/
1932 ftp://ftp.ri.telefonica-data.net/CPAN
1933 ftp://ftp.etse.urv.es/pub/perl/
1937 http://ftp.du.se/CPAN/
1938 ftp://ftp.du.se/pub/CPAN/
1939 http://mirror.dataphone.se/CPAN
1940 ftp://mirror.dataphone.se/pub/CPAN
1941 ftp://ftp.sunet.se/pub/lang/perl/CPAN/
1945 http://cpan.mirror.solnet.ch/
1946 ftp://ftp.solnet.ch/mirror/CPAN/
1947 ftp://ftp.danyk.ch/CPAN/
1948 ftp://sunsite.cnlab-switch.ch/mirror/CPAN/
1952 http://ftp.ulak.net.tr/perl/CPAN/
1953 ftp://ftp.ulak.net.tr/perl/CPAN
1954 ftp://sunsite.bilkent.edu.tr/pub/languages/CPAN/
1960 ftp://ftp.perl.org.ua/pub/CPAN/
1961 http://no-more.kiev.ua/CPAN/
1962 ftp://no-more.kiev.ua/pub/CPAN/
1964 =item United Kingdom
1966 http://www.mirror.ac.uk/sites/ftp.funet.fi/pub/languages/perl/CPAN
1967 ftp://ftp.mirror.ac.uk/sites/ftp.funet.fi/pub/languages/perl/CPAN/
1968 http://cpan.teleglobe.net/
1969 ftp://cpan.teleglobe.net/pub/CPAN
1970 http://cpan.mirror.anlx.net/
1971 ftp://ftp.mirror.anlx.net/CPAN/
1972 http://cpan.etla.org/
1973 ftp://cpan.etla.org/pub/CPAN
1974 ftp://ftp.demon.co.uk/pub/CPAN/
1975 http://cpan.m.flirble.org/
1976 ftp://ftp.flirble.org/pub/languages/perl/CPAN/
1977 ftp://ftp.plig.org/pub/CPAN/
1978 http://cpan.hambule.co.uk/
1979 http://cpan.mirrors.clockerz.net/
1980 ftp://ftp.clockerz.net/pub/CPAN/
1981 ftp://usit.shef.ac.uk/pub/packages/CPAN/
1985 =head2 North America
1995 http://cpan.sunsite.ualberta.ca/
1996 ftp://cpan.sunsite.ualberta.ca/pub/CPAN/
2000 http://theoryx5.uwinnipeg.ca/pub/CPAN/
2001 ftp://theoryx5.uwinnipeg.ca/pub/CPAN/
2005 ftp://cpan.chebucto.ns.ca/pub/CPAN/
2009 ftp://ftp.nrc.ca/pub/CPAN/
2015 http://cpan.azc.uam.mx
2016 ftp://cpan.azc.uam.mx/mirrors/CPAN
2017 http://www.cpan.unam.mx/
2018 ftp://ftp.unam.mx/pub/CPAN
2019 http://www.msg.com.mx/CPAN/
2020 ftp://ftp.msg.com.mx/pub/CPAN/
2028 http://mirror.hiwaay.net/CPAN/
2029 ftp://mirror.hiwaay.net/CPAN/
2033 http://cpan.develooper.com/
2034 http://www.cpan.org/
2035 ftp://cpan.valueclick.com/pub/CPAN/
2036 http://www.mednor.net/ftp/pub/mirrors/CPAN/
2037 ftp://ftp.mednor.net/pub/mirrors/CPAN/
2038 http://mirrors.gossamer-threads.com/CPAN
2039 ftp://cpan.nas.nasa.gov/pub/perl/CPAN/
2040 http://mirrors.kernel.org/cpan/
2041 ftp://mirrors.kernel.org/pub/CPAN
2042 http://cpan-sj.viaverio.com/
2043 ftp://cpan-sj.viaverio.com/pub/CPAN/
2044 http://cpan.digisle.net/
2045 ftp://cpan.digisle.net/pub/CPAN
2046 http://www.perl.com/CPAN/
2047 http://www.uberlan.net/CPAN
2051 ftp://ftp.cs.colorado.edu/pub/perl/CPAN/
2052 http://cpan.four10.com
2056 http://ftp.lug.udel.edu/pub/CPAN
2057 ftp://ftp.lug.udel.edu/pub/CPAN
2059 =item District of Columbia
2061 ftp://ftp.dc.aleron.net/pub/CPAN/
2065 ftp://ftp.cise.ufl.edu/pub/mirrors/CPAN/
2066 http://mirror.csit.fsu.edu/pub/CPAN/
2067 ftp://mirror.csit.fsu.edu/pub/CPAN/
2068 http://cpan.mirrors.nks.net/
2072 ftp://ftp.uwsg.iu.edu/pub/perl/CPAN/
2073 http://cpan.netnitco.net/
2074 ftp://cpan.netnitco.net/pub/mirrors/CPAN/
2075 http://archive.progeny.com/CPAN/
2076 ftp://archive.progeny.com/CPAN/
2077 http://fx.saintjoe.edu/pub/CPAN
2078 ftp://ftp.saintjoe.edu/pub/CPAN
2079 http://csociety-ftp.ecn.purdue.edu/pub/CPAN
2080 ftp://csociety-ftp.ecn.purdue.edu/pub/CPAN
2084 http://cpan.uky.edu/
2085 ftp://cpan.uky.edu/pub/CPAN/
2086 http://slugsite.louisville.edu/cpan
2087 ftp://slugsite.louisville.edu/CPAN
2091 http://mirrors.towardex.com/CPAN
2092 ftp://mirrors.towardex.com/pub/CPAN
2093 ftp://ftp.ccs.neu.edu/net/mirrors/ftp.funet.fi/pub/languages/perl/CPAN/
2097 ftp://cpan.cse.msu.edu/
2098 http://cpan.calvin.edu/pub/CPAN
2099 ftp://cpan.calvin.edu/pub/CPAN
2103 http://www.oss.redundant.com/pub/CPAN
2104 ftp://www.oss.redundant.com/pub/CPAN
2108 http://ftp.cpanel.net/pub/CPAN/
2109 ftp://ftp.cpanel.net/pub/CPAN/
2110 http://cpan.teleglobe.net/
2111 ftp://cpan.teleglobe.net/pub/CPAN
2115 http://cpan.belfry.net/
2116 http://cpan.erlbaum.net/
2117 ftp://cpan.erlbaum.net/
2118 http://cpan.thepirtgroup.com/
2119 ftp://cpan.thepirtgroup.com/
2120 ftp://ftp.stealth.net/pub/CPAN/
2121 http://www.rge.com/pub/languages/perl/
2122 ftp://ftp.rge.com/pub/languages/perl/
2124 =item North Carolina
2126 http://www.ibiblio.org/pub/languages/perl/CPAN
2127 ftp://ftp.ibiblio.org/pub/languages/perl/CPAN
2128 ftp://ftp.duke.edu/pub/perl/
2129 ftp://ftp.ncsu.edu/pub/mirror/CPAN/
2133 ftp://ftp.ou.edu/mirrors/CPAN/
2137 ftp://ftp.orst.edu/pub/CPAN
2141 http://ftp.epix.net/CPAN/
2142 ftp://ftp.epix.net/pub/languages/perl/
2143 http://mirrors.phenominet.com/pub/CPAN/
2144 ftp://mirrors.phenominet.com/pub/CPAN/
2145 http://cpan.pair.com/
2146 ftp://cpan.pair.com/pub/CPAN/
2147 ftp://carroll.cac.psu.edu/pub/CPAN/
2151 ftp://ftp.sunsite.utk.edu/pub/CPAN/
2155 http://ftp.sedl.org/pub/mirrors/CPAN/
2156 http://www.binarycode.org/cpan
2157 ftp://mirror.telentente.com/pub/CPAN
2158 http://mirrors.theonlinerecordstore.com/CPAN
2162 ftp://mirror.xmission.com/CPAN/
2166 http://cpan-du.viaverio.com/
2167 ftp://cpan-du.viaverio.com/pub/CPAN/
2168 http://mirrors.rcn.net/pub/lang/CPAN/
2169 ftp://mirrors.rcn.net/pub/lang/CPAN/
2170 http://perl.secsup.org/
2171 ftp://perl.secsup.org/pub/perl/
2172 http://noc.cvaix.com/mirrors/CPAN/
2176 http://cpan.llarian.net/
2177 ftp://cpan.llarian.net/pub/CPAN/
2178 http://cpan.mirrorcentral.com/
2179 ftp://ftp.mirrorcentral.com/pub/CPAN/
2180 ftp://ftp-mirror.internap.com/pub/CPAN/
2184 http://mirror.sit.wisc.edu/pub/CPAN/
2185 ftp://mirror.sit.wisc.edu/pub/CPAN/
2186 http://mirror.aphix.com/CPAN
2187 ftp://mirror.aphix.com/pub/CPAN
2199 http://ftp.planetmirror.com/pub/CPAN/
2200 ftp://ftp.planetmirror.com/pub/CPAN/
2201 ftp://mirror.aarnet.edu.au/pub/perl/CPAN/
2202 ftp://cpan.topend.com.au/pub/CPAN/
2203 http://cpan.mirrors.ilisys.com.au
2207 ftp://ftp.auckland.ac.nz/pub/perl/CPAN/
2211 http://aniani.ifa.hawaii.edu/CPAN/
2212 ftp://aniani.ifa.hawaii.edu/CPAN/
2216 =head2 South America
2222 ftp://mirrors.bannerlandia.com.ar/mirrors/CPAN/
2223 http://www.linux.org.ar/mirrors/cpan
2224 ftp://ftp.linux.org.ar/mirrors/cpan
2228 ftp://cpan.pop-mg.com.br/pub/CPAN/
2229 ftp://ftp.matrix.com.br/pub/perl/CPAN/
2230 http://cpan.hostsul.com.br/
2231 ftp://cpan.hostsul.com.br/
2235 http://cpan.netglobalis.net/
2236 ftp://cpan.netglobalis.net/pub/CPAN/
2240 =head2 RSYNC Mirrors
2242 www.linux.org.ar::cpan
2243 theoryx5.uwinnipeg.ca::CPAN
2244 ftp.shellhung.org::CPAN
2245 rsync.nic.funet.fi::CPAN
2246 ftp.u-paris10.fr::CPAN
2248 rsync://ftp.crihan.fr::CPAN
2249 ftp.gwdg.de::FTP/languages/perl/CPAN/
2251 ftp.cbn.net.id::CPAN
2252 rsync://ftp.heanet.ie/mirrors/ftp.perl.org/pub/CPAN
2253 ftp.iglu.org.il::CPAN
2254 gusp.dyndns.org::cpan
2255 ftp.kddlabs.co.jp::cpan
2256 ftp.ayamura.org::pub/CPAN/
2257 mirror.leafbug.org::CPAN
2258 rsync.en.com.sg::CPAN
2259 mirror.averse.net::cpan
2260 rsync.oss.eznetsols.org
2261 ftp.kr.FreeBSD.org::CPAN
2263 cpan.cdpa.nsysu.edu.tw::CPAN
2264 cpan.teleglobe.net::CPAN
2265 rsync://rsync.mirror.anlx.net::CPAN
2268 cpan-du.viaverio.com::CPAN
2269 aniani.ifa.hawaii.edu::CPAN
2270 archive.progeny.com::CPAN
2271 rsync://slugsite.louisville.edu::CPAN
2272 mirror.aphix.com::CPAN
2273 cpan.teleglobe.net::CPAN
2274 ftp.lug.udel.edu::cpan
2275 mirrors.kernel.org::mirrors/CPAN
2276 mirrors.phenominet.com::CPAN
2278 cpan-sj.viaverio.com::CPAN
2279 mirror.csit.fsu.edu::CPAN
2280 csociety-ftp.ecn.purdue.edu::CPAN
2282 For an up-to-date listing of CPAN sites,
2283 see http://www.cpan.org/SITES or ftp://www.cpan.org/SITES .
2285 =head1 Modules: Creation, Use, and Abuse
2287 (The following section is borrowed directly from Tim Bunce's modules
2288 file, available at your nearest CPAN site.)
2290 Perl implements a class using a package, but the presence of a
2291 package doesn't imply the presence of a class. A package is just a
2292 namespace. A class is a package that provides subroutines that can be
2293 used as methods. A method is just a subroutine that expects, as its
2294 first argument, either the name of a package (for "static" methods),
2295 or a reference to something (for "virtual" methods).
2297 A module is a file that (by convention) provides a class of the same
2298 name (sans the .pm), plus an import method in that class that can be
2299 called to fetch exported symbols. This module may implement some of
2300 its methods by loading dynamic C or C++ objects, but that should be
2301 totally transparent to the user of the module. Likewise, the module
2302 might set up an AUTOLOAD function to slurp in subroutine definitions on
2303 demand, but this is also transparent. Only the F<.pm> file is required to
2304 exist. See L<perlsub>, L<perltoot>, and L<AutoLoader> for details about
2305 the AUTOLOAD mechanism.
2307 =head2 Guidelines for Module Creation
2313 Do similar modules already exist in some form?
2315 If so, please try to reuse the existing modules either in whole or
2316 by inheriting useful features into a new class. If this is not
2317 practical try to get together with the module authors to work on
2318 extending or enhancing the functionality of the existing modules.
2319 A perfect example is the plethora of packages in perl4 for dealing
2320 with command line options.
2322 If you are writing a module to expand an already existing set of
2323 modules, please coordinate with the author of the package. It
2324 helps if you follow the same naming scheme and module interaction
2325 scheme as the original author.
2329 Try to design the new module to be easy to extend and reuse.
2331 Try to C<use warnings;> (or C<use warnings qw(...);>).
2332 Remember that you can add C<no warnings qw(...);> to individual blocks
2333 of code that need less warnings.
2335 Use blessed references. Use the two argument form of bless to bless
2336 into the class name given as the first parameter of the constructor,
2341 return bless {}, $class;
2344 or even this if you'd like it to be used as either a static
2345 or a virtual method.
2349 my $class = ref($self) || $self;
2350 return bless {}, $class;
2353 Pass arrays as references so more parameters can be added later
2354 (it's also faster). Convert functions into methods where
2355 appropriate. Split large methods into smaller more flexible ones.
2356 Inherit methods from other modules if appropriate.
2358 Avoid class name tests like: C<die "Invalid" unless ref $ref eq 'FOO'>.
2359 Generally you can delete the C<eq 'FOO'> part with no harm at all.
2360 Let the objects look after themselves! Generally, avoid hard-wired
2361 class names as far as possible.
2363 Avoid C<< $r->Class::func() >> where using C<@ISA=qw(... Class ...)> and
2364 C<< $r->func() >> would work (see L<perlbot> for more details).
2366 Use autosplit so little used or newly added functions won't be a
2367 burden to programs that don't use them. Add test functions to
2368 the module after __END__ either using AutoSplit or by saying:
2370 eval join('',<main::DATA>) || die $@ unless caller();
2372 Does your module pass the 'empty subclass' test? If you say
2373 C<@SUBCLASS::ISA = qw(YOURCLASS);> your applications should be able
2374 to use SUBCLASS in exactly the same way as YOURCLASS. For example,
2375 does your application still work if you change: C<$obj = new YOURCLASS;>
2376 into: C<$obj = new SUBCLASS;> ?
2378 Avoid keeping any state information in your packages. It makes it
2379 difficult for multiple other packages to use yours. Keep state
2380 information in objects.
2384 Try to C<use strict;> (or C<use strict qw(...);>).
2385 Remember that you can add C<no strict qw(...);> to individual blocks
2386 of code that need less strictness.
2390 Follow the guidelines in the perlstyle(1) manual.
2396 Some simple style guidelines
2398 The perlstyle manual supplied with Perl has many helpful points.
2400 Coding style is a matter of personal taste. Many people evolve their
2401 style over several years as they learn what helps them write and
2402 maintain good code. Here's one set of assorted suggestions that
2403 seem to be widely used by experienced developers:
2405 Use underscores to separate words. It is generally easier to read
2406 $var_names_like_this than $VarNamesLikeThis, especially for
2407 non-native speakers of English. It's also a simple rule that works
2408 consistently with VAR_NAMES_LIKE_THIS.
2410 Package/Module names are an exception to this rule. Perl informally
2411 reserves lowercase module names for 'pragma' modules like integer
2412 and strict. Other modules normally begin with a capital letter and
2413 use mixed case with no underscores (need to be short and portable).
2415 You may find it helpful to use letter case to indicate the scope
2416 or nature of a variable. For example:
2418 $ALL_CAPS_HERE constants only (beware clashes with Perl vars)
2419 $Some_Caps_Here package-wide global/static
2420 $no_caps_here function scope my() or local() variables
2422 Function and method names seem to work best as all lowercase.
2423 e.g., C<< $obj->as_string() >>.
2425 You can use a leading underscore to indicate that a variable or
2426 function should not be used outside the package that defined it.
2430 Select what to export.
2432 Do NOT export method names!
2434 Do NOT export anything else by default without a good reason!
2436 Exports pollute the namespace of the module user. If you must
2437 export try to use @EXPORT_OK in preference to @EXPORT and avoid
2438 short or common names to reduce the risk of name clashes.
2440 Generally anything not exported is still accessible from outside the
2441 module using the ModuleName::item_name (or C<< $blessed_ref->method >>)
2442 syntax. By convention you can use a leading underscore on names to
2443 indicate informally that they are 'internal' and not for public use.
2445 (It is actually possible to get private functions by saying:
2446 C<my $subref = sub { ... }; &$subref;>. But there's no way to call that
2447 directly as a method, because a method must have a name in the symbol
2450 As a general rule, if the module is trying to be object oriented
2451 then export nothing. If it's just a collection of functions then
2452 @EXPORT_OK anything but use @EXPORT with caution.
2456 Select a name for the module.
2458 This name should be as descriptive, accurate, and complete as
2459 possible. Avoid any risk of ambiguity. Always try to use two or
2460 more whole words. Generally the name should reflect what is special
2461 about what the module does rather than how it does it. Please use
2462 nested module names to group informally or categorize a module.
2463 There should be a very good reason for a module not to have a nested name.
2464 Module names should begin with a capital letter.
2466 Having 57 modules all called Sort will not make life easy for anyone
2467 (though having 23 called Sort::Quick is only marginally better :-).
2468 Imagine someone trying to install your module alongside many others.
2469 If in any doubt ask for suggestions in comp.lang.perl.misc.
2471 If you are developing a suite of related modules/classes it's good
2472 practice to use nested classes with a common prefix as this will
2473 avoid namespace clashes. For example: Xyz::Control, Xyz::View,
2474 Xyz::Model etc. Use the modules in this list as a naming guide.
2476 If adding a new module to a set, follow the original author's
2477 standards for naming modules and the interface to methods in
2480 If developing modules for private internal or project specific use,
2481 that will never be released to the public, then you should ensure
2482 that their names will not clash with any future public module. You
2483 can do this either by using the reserved Local::* category or by
2484 using a category name that includes an underscore like Foo_Corp::*.
2486 To be portable each component of a module name should be limited to
2487 11 characters. If it might be used on MS-DOS then try to ensure each is
2488 unique in the first 8 characters. Nested modules make this easier.
2492 Have you got it right?
2494 How do you know that you've made the right decisions? Have you
2495 picked an interface design that will cause problems later? Have
2496 you picked the most appropriate name? Do you have any questions?
2498 The best way to know for sure, and pick up many helpful suggestions,
2499 is to ask someone who knows. Comp.lang.perl.misc is read by just about
2500 all the people who develop modules and it's the best place to ask.
2502 All you need to do is post a short summary of the module, its
2503 purpose and interfaces. A few lines on each of the main methods is
2504 probably enough. (If you post the whole module it might be ignored
2505 by busy people - generally the very people you want to read it!)
2507 Don't worry about posting if you can't say when the module will be
2508 ready - just say so in the message. It might be worth inviting
2509 others to help you, they may be able to complete it for you!
2513 README and other Additional Files.
2515 It's well known that software developers usually fully document the
2516 software they write. If, however, the world is in urgent need of
2517 your software and there is not enough time to write the full
2518 documentation please at least provide a README file containing:
2524 A description of the module/package/extension etc.
2528 A copyright notice - see below.
2532 Prerequisites - what else you may need to have.
2536 How to build it - possible changes to Makefile.PL etc.
2544 Recent changes in this release, especially incompatibilities
2548 Changes / enhancements you plan to make in the future.
2552 If the README file seems to be getting too large you may wish to
2553 split out some of the sections into separate files: INSTALL,
2560 Adding a Copyright Notice.
2562 How you choose to license your work is a personal decision.
2563 The general mechanism is to assert your Copyright and then make
2564 a declaration of how others may copy/use/modify your work.
2566 Perl, for example, is supplied with two types of licence: The GNU GPL
2567 and The Artistic Licence (see the files README, Copying, and Artistic,
2568 or L<perlgpl> and L<perlartistic>). Larry has good reasons for NOT
2569 just using the GNU GPL.
2571 My personal recommendation, out of respect for Larry, Perl, and the
2572 Perl community at large is to state something simply like:
2574 Copyright (c) 1995 Your Name. All rights reserved.
2575 This program is free software; you can redistribute it and/or
2576 modify it under the same terms as Perl itself.
2578 This statement should at least appear in the README file. You may
2579 also wish to include it in a Copying file and your source files.
2580 Remember to include the other words in addition to the Copyright.
2584 Give the module a version/issue/release number.
2586 To be fully compatible with the Exporter and MakeMaker modules you
2587 should store your module's version number in a non-my package
2588 variable called $VERSION. This should be a floating point
2589 number with at least two digits after the decimal (i.e., hundredths,
2590 e.g, C<$VERSION = "0.01">). Don't use a "1.3.2" style version.
2591 See L<Exporter> for details.
2593 It may be handy to add a function or method to retrieve the number.
2594 Use the number in announcements and archive file names when
2595 releasing the module (ModuleName-1.02.tar.Z).
2596 See perldoc ExtUtils::MakeMaker.pm for details.
2600 How to release and distribute a module.
2602 It's good idea to post an announcement of the availability of your
2603 module (or the module itself if small) to the comp.lang.perl.announce
2604 Usenet newsgroup. This will at least ensure very wide once-off
2607 If possible, register the module with CPAN. You should
2608 include details of its location in your announcement.
2610 Some notes about ftp archives: Please use a long descriptive file
2611 name that includes the version number. Most incoming directories
2612 will not be readable/listable, i.e., you won't be able to see your
2613 file after uploading it. Remember to send your email notification
2614 message as soon as possible after uploading else your file may get
2615 deleted automatically. Allow time for the file to be processed
2616 and/or check the file has been processed before announcing its
2619 FTP Archives for Perl Modules:
2621 Follow the instructions and links on:
2623 http://www.cpan.org/modules/00modlist.long.html
2624 http://www.cpan.org/modules/04pause.html
2626 or upload to one of these sites:
2628 https://pause.kbx.de/pause/
2629 http://pause.perl.org/pause/
2631 and notify <modules@perl.org>.
2633 By using the WWW interface you can ask the Upload Server to mirror
2634 your modules from your ftp or WWW site into your own directory on
2637 Please remember to send me an updated entry for the Module list!
2641 Take care when changing a released module.
2643 Always strive to remain compatible with previous released versions.
2644 Otherwise try to add a mechanism to revert to the
2645 old behavior if people rely on it. Document incompatible changes.
2651 =head2 Guidelines for Converting Perl 4 Library Scripts into Modules
2657 There is no requirement to convert anything.
2659 If it ain't broke, don't fix it! Perl 4 library scripts should
2660 continue to work with no problems. You may need to make some minor
2661 changes (like escaping non-array @'s in double quoted strings) but
2662 there is no need to convert a .pl file into a Module for just that.
2666 Consider the implications.
2668 All Perl applications that make use of the script will need to
2669 be changed (slightly) if the script is converted into a module. Is
2670 it worth it unless you plan to make other changes at the same time?
2674 Make the most of the opportunity.
2676 If you are going to convert the script to a module you can use the
2677 opportunity to redesign the interface. The guidelines for module
2678 creation above include many of the issues you should consider.
2682 The pl2pm utility will get you started.
2684 This utility will read *.pl files (given as parameters) and write
2685 corresponding *.pm files. The pl2pm utilities does the following:
2691 Adds the standard Module prologue lines
2695 Converts package specifiers from ' to ::
2699 Converts die(...) to croak(...)
2703 Several other minor changes
2707 Being a mechanical process pl2pm is not bullet proof. The converted
2708 code will need careful checking, especially any package statements.
2709 Don't delete the original .pl file till the new .pm one works!
2713 =head2 Guidelines for Reusing Application Code
2719 Complete applications rarely belong in the Perl Module Library.
2723 Many applications contain some Perl code that could be reused.
2725 Help save the world! Share your code in a form that makes it easy
2730 Break-out the reusable code into one or more separate module files.
2734 Take the opportunity to reconsider and redesign the interfaces.
2738 In some cases the 'application' can then be reduced to a small
2740 fragment of code built on top of the reusable modules. In these cases
2741 the application could invoked as:
2743 % perl -e 'use Module::Name; method(@ARGV)' ...
2745 % perl -mModule::Name ... (in perl5.002 or higher)
2751 Perl does not enforce private and public parts of its modules as you may
2752 have been used to in other languages like C++, Ada, or Modula-17. Perl
2753 doesn't have an infatuation with enforced privacy. It would prefer
2754 that you stayed out of its living room because you weren't invited, not
2755 because it has a shotgun.
2757 The module and its user have a contract, part of which is common law,
2758 and part of which is "written". Part of the common law contract is
2759 that a module doesn't pollute any namespace it wasn't asked to. The
2760 written contract for the module (A.K.A. documentation) may make other
2761 provisions. But then you know when you C<use RedefineTheWorld> that
2762 you're redefining the world and willing to take the consequences.