perlmodlib
PERLMODLIB(B)    Perl Programmers Reference Guide   PERLMODLIB(B)



NAME
       perlmodlib - constructing new Perl modules and finding
       existing ones

DESCRIPTION
THE PERL MODULE LIBRARY
       Many modules are included the Perl distribution.  These
       are described below, and all end in .pm.  You may discover
       compiled library file (usually ending in .so) or small
       pieces of modules to be autoloaded (ending in .al); these
       were automatically generated by the installation process.
       You may also discover files in the library directory that
       end in either .pl or .ph.  These are old libraries sup-
       plied so that old programs that use them still run.  The
       .pl files will all eventually be converted into standard
       modules, and the .ph files made by h2ph will probably end
       up as extension modules made by h2xs.  (Some .ph values
       may already be available through the POSIX, Errno, or
       Fcntl modules.)  The pl2pm file in the distribution may
       help in your conversion, but it's just a mechanical pro-
       cess and therefore far from bulletproof.

       Pragmatic Modules

       They work somewhat like compiler directives (pragmata) in
       that they tend to affect the compilation of your program,
       and thus will usually work well only when used within a
       "use", or "no".  Most of these are lexically scoped, so an
       inner BLOCK may countermand them by saying:

           no integer;
           no strict 'refs';
           no warnings;

       which lasts until the end of that BLOCK.

       Some pragmas are lexically scoped--typically those that
       affect the $^H hints variable.  Others affect the current
       package instead, like "use vars" and "use subs", which
       allow you to predeclare a variables or subroutines within
       a particular file rather than just a block.  Such declara-
       tions are effective for the entire file for which they
       were declared.  You cannot rescind them with "no vars" or
       "no subs".

       The following pragmas are defined (and have their own doc-
       umentation).

       attributes  Get/set subroutine or variable attributes

       attrs       Set/get attributes of a subroutine (depre-
                   cated)

       autouse     Postpone load of modules until a function is
                   used

       base        Establish IS-A relationship with base class at
                   compile time

       blib        Use MakeMaker's uninstalled version of a pack-
                   age

       bytes       Force byte semantics rather than character
                   semantics

       charnames   Define character names for "\N{named}" string
                   literal escape.

       constant    Declare constants

       diagnostics Perl compiler pragma to force verbose warning
                   diagnostics

       fields      Compile-time class fields

       filetest    Control the filetest permission operators

       integer     Use integer arithmetic instead of floating
                   point

       less        Request less of something from the compiler

       lib         Manipulate @INC at compile time

       locale      Use and avoid POSIX locales for built-in oper-
                   ations

       open        Set default disciplines for input and output

       ops         Restrict unsafe operations when compiling

       overload    Package for overloading perl operations

       re          Alter regular expression behaviour

       sigtrap     Enable simple signal handling

       strict      Restrict unsafe constructs

       subs        Predeclare sub names

       utf8        Enable/disable UTF-8 in source code

       vars        Predeclare global variable names (obsolete)

       warnings    Control optional warnings

       warnings::register
                   Warnings import function

       Standard Modules

       Standard, bundled modules are all expected to behave in a
       well-defined manner with respect to namespace pollution
       because they use the Exporter module.  See their own docu-
       mentation for details.

       AnyDBM_File Provide framework for multiple DBMs

       AutoLoader  Load subroutines only on demand

       AutoSplit   Split a package for autoloading

       B           The Perl Compiler

       B::Asmdata  Autogenerated data about Perl ops, used to
                   generate bytecode

       B::Assembler
                   Assemble Perl bytecode

       B::Bblock   Walk basic blocks

       B::Bytecode Perl compiler's bytecode backend

       B::C        Perl compiler's C backend

       B::CC       Perl compiler's optimized C translation back-
                   end

       B::Concise  Walk Perl syntax tree, printing concise info
                   about ops

       B::Debug    Walk Perl syntax tree, printing debug info
                   about ops

       B::Deparse  Perl compiler backend to produce perl code

       B::Disassembler
                   Disassemble Perl bytecode

       B::Lint     Perl lint

       B::Showlex  Show lexical variables used in functions or
                   files

       B::Stackobj Helper module for CC backend

       B::Stash    Show what stashes are loaded

       B::Terse    Walk Perl syntax tree, printing terse info
                   about ops

       B::Xref     Generates cross reference reports for Perl
                   programs

       Benchmark   Benchmark running times of Perl code

       ByteLoader  Load byte compiled perl code

       CGI         Simple Common Gateway Interface Class

       CGI::Apache Backward compatibility module for CGI.pm

       CGI::Carp   CGI routines for writing to the HTTPD (or
                   other) error log

       CGI::Cookie Interface to Netscape Cookies

       CGI::Fast   CGI Interface for Fast CGI

       CGI::Pretty Module to produce nicely formatted HTML code

       CGI::Push   Simple Interface to Server Push

       CGI::Switch Backward compatibility module for defunct
                   CGI::Switch

       CGI::Util   Internal utilities used by CGI module

       CPAN        Query, download and build perl modules from
                   CPAN sites

       CPAN::FirstTime
                   Utility for CPAN::Config file Initialization

       CPAN::Nox   Wrapper around CPAN.pm without using any XS
                   module

       Carp        Warn of errors (from perspective of caller)

       Carp::Heavy Carp guts

       Class::Struct
                   Declare struct-like datatypes as Perl classes

       Cwd         Get pathname of current working directory

       DB          Programmatic interface to the Perl debugging
                   API (draft, subject to

       DB_File     Perl5 access to Berkeley DB version 1.x

       Devel::SelfStubber
                   Generate stubs for a SelfLoading module

       DirHandle   Supply object methods for directory handles

       Dumpvalue   Provides screen dump of Perl data.

       English     Use nice English (or awk) names for ugly punc-
                   tuation variables

       Env         Perl module that imports environment variables
                   as scalars or arrays

       Exporter    Implements default import method for modules

       Exporter::Heavy
                   Exporter guts

       ExtUtils::Command
                   Utilities to replace common UNIX commands in
                   Makefiles etc.

       ExtUtils::Embed
                   Utilities for embedding Perl in C/C++ applica-
                   tions

       ExtUtils::Install
                   Install files from here to there

       ExtUtils::Installed
                   Inventory management of installed modules

       ExtUtils::Liblist
                   Determine libraries to use and how to use them

       ExtUtils::MM_Cygwin
                   Methods to override UN*X behaviour in ExtU-
                   tils::MakeMaker

       ExtUtils::MM_OS2
                   Methods to override UN*X behaviour in ExtU-
                   tils::MakeMaker

       ExtUtils::MM_Unix
                   Methods used by ExtUtils::MakeMaker

       ExtUtils::MM_VMS
                   Methods to override UN*X behaviour in ExtU-
                   tils::MakeMaker

       ExtUtils::MM_Win32
                   Methods to override UN*X behaviour in ExtU-
                   tils::MakeMaker

       ExtUtils::MakeMaker
                   Create an extension Makefile

       ExtUtils::Manifest
                   Utilities to write and check a MANIFEST file

       ExtUtils::Mkbootstrap
                   Make a bootstrap file for use by DynaLoader

       ExtUtils::Mksymlists
                   Write linker options files for dynamic exten-
                   sion

       ExtUtils::Packlist
                   Manage .packlist files

       ExtUtils::testlib
                   Add blib/* directories to @INC

       Fatal       Replace functions with equivalents which suc-
                   ceed or die

       Fcntl       Load the C Fcntl.h defines

       File::Basename
                   Split a pathname into pieces

       File::CheckTree
                   Run many filetest checks on a tree

       File::Compare
                   Compare files or filehandles

       File::Copy  Copy files or filehandles

       File::DosGlob
                   DOS like globbing and then some

       File::Find  Traverse a file tree

       File::Path  Create or remove directory trees

       File::Spec  Portably perform operations on file names

       File::Spec::Epoc
                   Methods for Epoc file specs

       File::Spec::Functions
                   Portably perform operations on file names

       File::Spec::Mac
                   File::Spec for MacOS

       File::Spec::OS2
                   Methods for OS/2 file specs

       File::Spec::Unix
                   Methods used by File::Spec

       File::Spec::VMS
                   Methods for VMS file specs

       File::Spec::Win32
                   Methods for Win32 file specs

       File::Temp  Return name and handle of a temporary file
                   safely

       File::stat  By-name interface to Perl's built-in stat()
                   functions

       FileCache   Keep more files open than the system permits

       FileHandle  Supply object methods for filehandles

       FindBin     Locate directory of original perl script

       GDBM_File   Perl5 access to the gdbm library.

       Getopt::Long
                   Extended processing of command line options

       Getopt::Std Process single-character switches with switch
                   clustering

       I18N::Collate
                   Compare 8-bit scalar data according to the
                   current locale

       IO          Load various IO modules

       IPC::Open2  Open a process for both reading and writing

       IPC::Open3  Open a process for reading, writing, and error
                   handling

       Math::BigFloat
                   Arbitrary length float math package

       Math::BigInt
                   Arbitrary size integer math package

       Math::Complex
                   Complex numbers and associated mathematical
                   functions

       Math::Trig  Trigonometric functions

       Net::Ping   Check a remote host for reachability

       Net::hostent
                   By-name interface to Perl's built-in geth-
                   ost*() functions

       Net::netent By-name interface to Perl's built-in getnet*()
                   functions

       Net::protoent
                   By-name interface to Perl's built-in get-
                   proto*() functions

       Net::servent
                   By-name interface to Perl's built-in get-
                   serv*() functions

       O           Generic interface to Perl Compiler backends

       Opcode      Disable named opcodes when compiling perl code

       POSIX       Perl interface to IEEE Std 1003.1

       Pod::Checker
                   Check pod documents for syntax errors

       Pod::Find   Find POD documents in directory trees

       Pod::Html   Module to convert pod files to HTML

       Pod::InputObjects
                   Objects representing POD input paragraphs,
                   commands, etc.

       Pod::LaTeX  Convert Pod data to formatted Latex

       Pod::Man    Convert POD data to formatted *roff input

       Pod::ParseUtils
                   Helpers for POD parsing and conversion

       Pod::Parser Base class for creating POD filters and trans-
                   lators

       Pod::Plainer
                   Perl extension for converting Pod to old style
                   Pod.

       Pod::Select Extract selected sections of POD from input

       Pod::Text   Convert POD data to formatted ASCII text

       Pod::Text::Color
                   Convert POD data to formatted color ASCII text

       Pod::Text::Overstrike
                   Convert POD data to formatted overstrike text

       Pod::Text::Termcap
                   Convert POD data to ASCII text with format
                   escapes

       Pod::Usage  Print a usage message from embedded pod docu-
                   mentation

       SDBM_File   Tied access to sdbm files

       Safe        Compile and execute code in restricted com-
                   partments

       Search::Dict
                   Search for key in dictionary file

       SelectSaver Save and restore selected file handle

       SelfLoader  Load functions only on demand

       Shell       Run shell commands transparently within perl

       Socket      Load the C socket.h defines and structure
                   manipulators

       Symbol      Manipulate Perl symbols and their names

       Term::ANSIColor
                   Color screen output using ANSI escape
                   sequences

       Term::Cap   Perl termcap interface

       Term::Complete
                   Perl word completion module

       Term::ReadLine
                   Perl interface to various "readline" packages.
                   If

       Test        Provides a simple framework for writing test
                   scripts

       Test::Harness
                   Run perl standard test scripts with statistics

       Text::Abbrev
                   Create an abbreviation table from a list

       Text::ParseWords
                   Parse text into an array of tokens or array of
                   arrays

       Text::Soundex
                   Implementation of the Soundex Algorithm as
                   Described by Knuth

       Text::Tabs  Expand and unexpand tabs per the unix
                   expand(d) and unexpand(d)

       Text::Wrap  Line wrapping to form simple paragraphs

       Thread      Manipulate threads in Perl (EXPERIMENTAL, sub-
                   ject to change)

       Thread::Queue
                   Thread-safe queues

       Thread::Semaphore
                   Thread-safe semaphores

       Thread::Signal
                   Start a thread which runs signal handlers
                   reliably

       Thread::Specific
                   Thread-specific keys

       Tie::Array  Base class for tied arrays

       Tie::Handle Base class definitions for tied handles

       Tie::Hash   Base class definitions for tied hashes

       Tie::RefHash
                   Use references as hash keys

       Tie::Scalar Base class definitions for tied scalars

       Tie::SubstrHash
                   Fixed-table-size, fixed-key-length hashing

       Time::Local Efficiently compute time from local and GMT
                   time

       Time::gmtime
                   By-name interface to Perl's built-in gmtime()
                   function

       Time::localtime
                   By-name interface to Perl's built-in local-
                   time() function

       Time::tm    Internal object used by Time::gmtime and
                   Time::localtime

       UNIVERSAL   Base class for ALL classes (blessed refer-
                   ences)

       User::grent By-name interface to Perl's built-in getgr*()
                   functions

       User::pwent By-name interface to Perl's built-in getpw*()
                   functions

       Win32       Interfaces to some Win32 API Functions

       To find out all modules installed on your system, includ-
       ing those without documentation or outside the standard
       release, just do this:

           % find `perl -e 'print "@INC"'` -name '*.pm' -print

       They should all have their own documentation installed and
       accessible via your system man(n) command.  If you do not
       have a find program, you can use the Perl find2perl pro-
       gram instead, which generates Perl code as output you can
       run through perl.  If you have a man program but it
       doesn't find your modules, you'll have to fix your man-
       path.  See perl for details.  If you have no system man
       command, you might try the perldoc program.

       Extension Modules

       Extension modules are written in C (or a mix of Perl and
       C).  They are usually dynamically loaded into Perl if and
       when you need them, but may also be be linked in stati-
       cally.  Supported extension modules include Socket, Fcntl,
       and POSIX.

       Many popular C extension modules do not come bundled (at
       least, not completely) due to their sizes, volatility, or
       simply lack of time for adequate testing and configuration
       across the multitude of platforms on which Perl was
       beta-tested.  You are encouraged to look for them on CPAN
       (described below), or using web search engines like Alta
       Vista or Deja News.

CPAN
       CPAN stands for Comprehensive Perl Archive Network; it's a
       globally replicated trove of Perl materials, including
       documentation, style guides, tricks and traps, alternate
       ports to non-Unix systems and occasional binary distribu-
       tions for these.   Search engines for CPAN can be found at
       http://cpan.perl.com/ and at http://theory.uwin-
       nipeg.ca/mod_perl/cpan-search.pl .

       Most importantly, CPAN includes around a thousand
       unbundled modules, some of which require a C compiler to
       build.  Major categories of modules are:

       o   Language Extensions and Documentation Tools

       o   Development Support

       o   Operating System Interfaces

       o   Networking, Device Control (modems) and InterProcess
           Communication

       o   Data Types and Data Type Utilities

       o   Database Interfaces

       o   User Interfaces

       o   Interfaces to / Emulations of Other Programming Lan-
           guages

       o   File Names, File Systems and File Locking (see also
           File Handles)

       o   String Processing, Language Text Processing, Parsing,
           and Searching

       o   Option, Argument, Parameter, and Configuration File
           Processing

       o   Internationalization and Locale

       o   Authentication, Security, and Encryption

       o   World Wide Web, HTML, HTTP, CGI, MIME

       o   Server and Daemon Utilities

       o   Archiving and Compression

       o   Images, Pixmap and Bitmap Manipulation, Drawing, and
           Graphing

       o   Mail and Usenet News

       o   Control Flow Utilities (callbacks and exceptions etc)

       o   File Handle and Input/Output Stream Utilities

       o   Miscellaneous Modules

       Registered CPAN sites as of this writing include the fol-
       lowing.  You should try to choose one close to you:

       Africa


       o   South Africa

               ftp://ftp.is.co.za/programming/perl/CPAN/
               ftp://ftp.saix.net/pub/CPAN/
               ftp://ftpza.co.za/pub/mirrors/cpan/
               ftp://ftp.sun.ac.za/CPAN/




       Asia


       o   China

               ftp://freesoft.cei.gov.cn/pub/languages/perl/CPAN/
               http://www2.linuxforum.net/mirror/CPAN/
               http://cpan.shellhung.org/
               ftp://ftp.shellhung.org/pub/CPAN


       o   Hong Kong

               http://CPAN.pacific.net.hk/
               ftp://ftp.pacific.net.hk/pub/mirror/CPAN/


       o   Indonesia

               http://piksi.itb.ac.id/CPAN/
               ftp://mirrors.piksi.itb.ac.id/CPAN/
               http://CPAN.mweb.co.id/
               ftp://ftp.mweb.co.id/pub/languages/perl/CPAN/


       o   Israel

               http://www.iglu.org.il:/pub/CPAN/
               ftp://ftp.iglu.org.il/pub/CPAN/
               http://bioinfo.weizmann.ac.il/pub/software/perl/CPAN/
               ftp://bioinfo.weizmann.ac.il/pub/software/perl/CPAN/


       o   Japan

               ftp://ftp.u-aizu.ac.jp/pub/lang/perl/CPAN/
               ftp://ftp.kddlabs.co.jp/CPAN/
               http://mirror.nucba.ac.jp/mirror/Perl/
               ftp://mirror.nucba.ac.jp/mirror/Perl/
               ftp://ftp.meisei-u.ac.jp/pub/CPAN/
               ftp://ftp.jaist.ac.jp/pub/lang/perl/CPAN/
               ftp://ftp.dti.ad.jp/pub/lang/CPAN/
               ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/


       o   Saudi Arabia

               ftp://ftp.isu.net.sa/pub/CPAN/


       o   Singapore

               http://cpan.hjc.edu.sg
               http://ftp.nus.edu.sg/unix/perl/CPAN/
               ftp://ftp.nus.edu.sg/pub/unix/perl/CPAN/


       o   South Korea

               http://CPAN.bora.net/
               ftp://ftp.bora.net/pub/CPAN/
               http://ftp.kornet.net/CPAN/
               ftp://ftp.kornet.net/pub/CPAN/
               ftp://ftp.nuri.net/pub/CPAN/


       o   Taiwan

               ftp://coda.nctu.edu.tw/UNIX/perl/CPAN
               ftp://ftp.ee.ncku.edu.tw/pub/perl/CPAN/
               ftp://ftp1.sinica.edu.tw/pub1/perl/CPAN/


       o   Thailand

               http://download.nectec.or.th/CPAN/
               ftp://ftp.nectec.or.th/pub/languages/CPAN/
               ftp://ftp.cs.riubon.ac.th/pub/mirrors/CPAN/


       Central America


       o   Costa Rica

               ftp://ftp.linux.co.cr/mirrors/CPAN/
               http://ftp.ucr.ac.cr/Unix/CPAN/
               ftp://ftp.ucr.ac.cr/pub/Unix/CPAN/


       Europe


       o   Austria

               ftp://ftp.tuwien.ac.at/pub/languages/perl/CPAN/


       o   Belgium

               http://ftp.easynet.be/CPAN/
               ftp://ftp.easynet.be/CPAN/
               ftp://ftp.kulnet.kuleuven.ac.be/pub/mirror/CPAN/


       o   Bulgaria

               ftp://ftp.ntrl.net/pub/mirrors/CPAN/


       o   Croatia

               ftp://ftp.linux.hr/pub/CPAN/


       o   Czech Republic

               http://www.fi.muni.cz/pub/perl/
               ftp://ftp.fi.muni.cz/pub/perl/
               ftp://sunsite.mff.cuni.cz/MIRRORS/ftp.funet.fi/pub/languages/perl/CPAN/


       o   Denmark

               ftp://sunsite.auc.dk/pub/languages/perl/CPAN/
               http://www.cpan.dk/CPAN/
               ftp://www.cpan.dk/ftp.cpan.org/CPAN/


       o   England

               http://www.mirror.ac.uk/sites/ftp.funet.fi/pub/languages/perl/CPAN
               ftp://ftp.mirror.ac.uk/sites/ftp.funet.fi/pub/languages/perl/CPAN/
               ftp://ftp.demon.co.uk/pub/mirrors/perl/CPAN/
               ftp://ftp.flirble.org/pub/languages/perl/CPAN/
               ftp://ftp.plig.org/pub/CPAN/
               ftp://sunsite.doc.ic.ac.uk/packages/CPAN/
               http://mirror.uklinux.net/CPAN/
               ftp://mirror.uklinux.net/pub/CPAN/
               ftp://usit.shef.ac.uk/pub/packages/CPAN/


       o   Estonia

               ftp://ftp.ut.ee/pub/languages/perl/CPAN/


       o   Finland

               ftp://ftp.funet.fi/pub/languages/perl/CPAN/


       o   France

               ftp://cpan.ftp.worldonline.fr/pub/CPAN/
               ftp://ftp.club-internet.fr/pub/perl/CPAN/
               ftp://ftp.lip6.fr/pub/perl/CPAN/
               ftp://ftp.oleane.net/pub/mirrors/CPAN/
               ftp://ftp.pasteur.fr/pub/computing/CPAN/
               ftp://cpan.cict.fr/pub/CPAN/
               ftp://ftp.uvsq.fr/pub/perl/CPAN/


       o   Germany

               ftp://ftp.rz.ruhr-uni-bochum.de/pub/CPAN/
               ftp://ftp.freenet.de/pub/ftp.cpan.org/pub/CPAN/
               ftp://ftp.uni-erlangen.de/pub/source/CPAN/
               ftp://ftp-stud.fht-esslingen.de/pub/Mirrors/CPAN
               ftp://ftp.gigabell.net/pub/CPAN/
               http://ftp.gwdg.de/pub/languages/perl/CPAN/
               ftp://ftp.gwdg.de/pub/languages/perl/CPAN/
               ftp://ftp.uni-hamburg.de/pub/soft/lang/perl/CPAN/
               ftp://ftp.leo.org/pub/comp/general/programming/languages/script/perl/CPAN/
               ftp://ftp.mpi-sb.mpg.de/pub/perl/CPAN/
               ftp://ftp.gmd.de/mirrors/CPAN/


       o   Greece

               ftp://ftp.forthnet.gr/pub/languages/perl/CPAN
               ftp://ftp.ntua.gr/pub/lang/perl/


       o   Hungary

               http://cpan.artifact.hu/
               ftp://cpan.artifact.hu/CPAN/
               ftp://ftp.kfki.hu/pub/packages/perl/CPAN/


       o   Iceland

               http://cpan.gm.is/
               ftp://ftp.gm.is/pub/CPAN/


       o   Ireland

               http://cpan.indigo.ie/
               ftp://cpan.indigo.ie/pub/CPAN/
               http://sunsite.compapp.dcu.ie/pub/perl/
               ftp://sunsite.compapp.dcu.ie/pub/perl/


       o   Italy

               http://cpan.nettuno.it/
               http://gusp.dyndns.org/CPAN/
               ftp://gusp.dyndns.org/pub/CPAN
               http://softcity.iol.it/cpan
               ftp://softcity.iol.it/pub/cpan
               ftp://ftp.unina.it/pub/Other/CPAN/
               ftp://ftp.unipi.it/pub/mirror/perl/CPAN/
               ftp://cis.uniRoma2.it/CPAN/
               ftp://ftp.edisontel.it/pub/CPAN_Mirror/
               ftp://ftp.flashnet.it/pub/CPAN/


       o   Latvia

               http://kvin.lv/pub/CPAN/


       o   Netherlands

               ftp://download.xs4all.nl/pub/mirror/CPAN/
               ftp://ftp.nl.uu.net/pub/CPAN/
               ftp://ftp.nluug.nl/pub/languages/perl/CPAN/
               ftp://ftp.cpan.nl/pub/CPAN/
               http://www.cs.uu.nl/mirror/CPAN/
               ftp://ftp.cs.uu.nl/mirror/CPAN/


       o   Norway

               ftp://sunsite.uio.no/pub/languages/perl/CPAN/
               ftp://ftp.uit.no/pub/languages/perl/cpan/


       o   Poland

               ftp://ftp.pk.edu.pl/pub/lang/perl/CPAN/
               ftp://ftp.mega.net.pl/pub/mirrors/ftp.perl.com/
               ftp://ftp.man.torun.pl/pub/doc/CPAN/
               ftp://sunsite.icm.edu.pl/pub/CPAN/


       o   Portugal

               ftp://ftp.ua.pt/pub/CPAN/
               ftp://perl.di.uminho.pt/pub/CPAN/
               ftp://ftp.ist.utl.pt/pub/CPAN/
               ftp://ftp.netc.pt/pub/CPAN/


       o   Romania






               ftp://archive.logicnet.ro/mirrors/ftp.cpan.org/CPAN/
               ftp://ftp.kappa.ro/pub/mirrors/ftp.perl.org/pub/CPAN/
               ftp://ftp.dntis.ro/pub/cpan/
               ftp://ftp.opsynet.com/cpan/
               ftp://ftp.dnttm.ro/pub/CPAN/
               ftp://ftp.timisoara.roedu.net/mirrors/CPAN/


       o   Russia

               ftp://ftp.chg.ru/pub/lang/perl/CPAN/
               http://cpan.rinet.ru/
               ftp://cpan.rinet.ru/pub/mirror/CPAN/
               ftp://ftp.aha.ru/pub/CPAN/
               ftp://ftp.sai.msu.su/pub/lang/perl/CPAN/


       o   Slovakia

               ftp://ftp.entry.sk/pub/languages/perl/CPAN/


       o   Slovenia

               ftp://ftp.arnes.si/software/perl/CPAN/


       o   Spain

               ftp://ftp.rediris.es/mirror/CPAN/
               ftp://ftp.etse.urv.es/pub/perl/


       o   Sweden

               http://ftp.du.se/CPAN/
               ftp://ftp.du.se/pub/CPAN/
               ftp://ftp.sunet.se/pub/lang/perl/CPAN/


       o   Switzerland

               ftp://ftp.danyk.ch/CPAN/
               ftp://sunsite.cnlab-switch.ch/mirror/CPAN/


       o   Turkey

               ftp://sunsite.bilkent.edu.tr/pub/languages/CPAN/


       North America


       o   Canada

           o       Alberta

                       http://sunsite.ualberta.ca/pub/Mirror/CPAN/
                       ftp://sunsite.ualberta.ca/pub/Mirror/CPAN/


           o       Manitoba

                       http://theoryx5.uwinnipeg.ca/pub/CPAN/
                       ftp://theoryx5.uwinnipeg.ca/pub/CPAN/


           o       Nova Scotia

                       ftp://cpan.chebucto.ns.ca/pub/CPAN/


           o       Ontario

                       ftp://ftp.crc.ca/pub/packages/lang/perl/CPAN/


           o       Mexico

                       http://www.msg.com.mx/CPAN/
                       ftp://ftp.msg.com.mx/pub/CPAN/


       o   United States

           o       Alabama

                       http://mirror.hiwaay.net/CPAN/
                       ftp://mirror.hiwaay.net/CPAN/


           o       California

                       http://www.cpan.org/
                       ftp://ftp.cpan.org/CPAN/
                       ftp://cpan.nas.nasa.gov/pub/perl/CPAN/
                       ftp://ftp.digital.com/pub/plan/perl/CPAN/
                       http://www.kernel.org/pub/mirrors/cpan/
                       ftp://ftp.kernel.org/pub/mirrors/cpan/
                       http://www.perl.com/CPAN/
                       http://download.sourceforge.net/mirrors/CPAN/


           o       Colorado

                       ftp://ftp.cs.colorado.edu/pub/perl/CPAN/


           o       Florida

                       ftp://ftp.cise.ufl.edu/pub/perl/CPAN/


           o       Georgia

                       ftp://ftp.twoguys.org/CPAN/


           o       Illinois

                       http://www.neurogames.com/mirrors/CPAN
                       http://uiarchive.uiuc.edu/mirrors/ftp/ftp.cpan.org/pub/CPAN/
                       ftp://uiarchive.uiuc.edu/mirrors/ftp/ftp.cpan.org/pub/CPAN/


           o       Indiana





                       ftp://ftp.uwsg.indiana.edu/pub/perl/CPAN/
                       http://cpan.nitco.com/
                       ftp://cpan.nitco.com/pub/CPAN/
                       ftp://cpan.in-span.net/
                       http://csociety-ftp.ecn.purdue.edu/pub/CPAN
                       ftp://csociety-ftp.ecn.purdue.edu/pub/CPAN


           o       Kentucky

                       http://cpan.uky.edu/
                       ftp://cpan.uky.edu/pub/CPAN/


           o       Massachusetts

                       ftp://ftp.ccs.neu.edu/net/mirrors/ftp.funet.fi/pub/languages/perl/CPAN/
                       ftp://ftp.iguide.com/pub/mirrors/packages/perl/CPAN/


           o       New Jersey

                       ftp://ftp.cpanel.net/pub/CPAN/


           o       New York

                       ftp://ftp.freesoftware.com/pub/perl/CPAN/
                       http://www.deao.net/mirrors/CPAN/
                       ftp://ftp.deao.net/pub/CPAN/
                       ftp://ftp.stealth.net/pub/mirrors/ftp.cpan.org/pub/CPAN/
                       http://mirror.nyc.anidea.com/CPAN/
                       ftp://mirror.nyc.anidea.com/pub/CPAN/
                       http://www.rge.com/pub/languages/perl/
                       ftp://ftp.rge.com/pub/languages/perl/
                       ftp://mirrors.cloud9.net/pub/mirrors/CPAN/


           o       North Carolina

                       ftp://ftp.duke.edu/pub/perl/


           o       Ohio

                       ftp://ftp.loaded.net/pub/CPAN/


           o       Oklahoma

                       ftp://ftp.ou.edu/mirrors/CPAN/


           o       Oregon

                       ftp://ftp.orst.edu/pub/packages/CPAN/


           o       Pennsylvania

                       http://ftp.epix.net/CPAN/
                       ftp://ftp.epix.net/pub/languages/perl/
                       ftp://carroll.cac.psu.edu/pub/CPAN/


           o       Tennessee

                       ftp://ftp.sunsite.utk.edu/pub/CPAN/


           o       Texas

                       http://ftp.sedl.org/pub/mirrors/CPAN/
                       http://jhcloos.com/pub/mirror/CPAN/
                       ftp://jhcloos.com/pub/mirror/CPAN/


           o       Utah

                       ftp://mirror.xmission.com/CPAN/


           o       Virginia

                       http://mirrors.rcn.net/pub/lang/CPAN/
                       ftp://mirrors.rcn.net/pub/lang/CPAN/
                       ftp://ruff.cs.jmu.edu/pub/CPAN/
                       http://perl.Liquidation.com/CPAN/


           o       Washington

                       http://cpan.llarian.net/
                       ftp://cpan.llarian.net/pub/CPAN/
                       ftp://ftp-mirror.internap.com/pub/CPAN/
                       ftp://ftp.spu.edu/pub/CPAN/


       Oceania


       o   Australia

               http://ftp.planetmirror.com/pub/CPAN/
               ftp://ftp.planetmirror.com/pub/CPAN/
               ftp://mirror.aarnet.edu.au/pub/perl/CPAN/
               ftp://cpan.topend.com.au/pub/CPAN/


       o   New Zealand

               ftp://ftp.auckland.ac.nz/pub/perl/CPAN/


       South America


       o   Argentina

               ftp://mirrors.bannerlandia.com.ar/mirrors/CPAN/


       o   Brazil

               ftp://cpan.pop-mg.com.br/pub/CPAN/
               ftp://ftp.matrix.com.br/pub/perl/
               ftp://cpan.if.usp.br/pub/mirror/CPAN/


       o   Chile


               ftp://ftp.psinet.cl/pub/programming/perl/CPAN/
               ftp://sunsite.dcc.uchile.cl/pub/lang/perl/


       For an up-to-date listing of CPAN sites, see
       http://www.cpan.org/SITES or ftp://www.cpan.org/SITES .

Modules: Creation, Use, and Abuse
       (The following section is borrowed directly from Tim
       Bunce's modules file, available at your nearest CPAN
       site.)

       Perl implements a class using a package, but the presence
       of a package doesn't imply the presence of a class.  A
       package is just a namespace.  A class is a package that
       provides subroutines that can be used as methods.  A
       method is just a subroutine that expects, as its first
       argument, either the name of a package (for "static" meth-
       ods), or a reference to something (for "virtual" methods).

       A module is a file that (by convention) provides a class
       of the same name (sans the .pm), plus an import method in
       that class that can be called to fetch exported symbols.
       This module may implement some of its methods by loading
       dynamic C or C++ objects, but that should be totally
       transparent to the user of the module.  Likewise, the mod-
       ule might set up an AUTOLOAD function to slurp in subrou-
       tine definitions on demand, but this is also transparent.
       Only the .pm file is required to exist.  See perlsub,
       perltoot, and AutoLoader for details about the AUTOLOAD
       mechanism.

       Guidelines for Module Creation


       o   Do similar modules already exist in some form?

           If so, please try to reuse the existing modules either
           in whole or by inheriting useful features into a new
           class.  If this is not practical try to get together
           with the module authors to work on extending or
           enhancing the functionality of the existing modules.
           A perfect example is the plethora of packages in perl4
           for dealing with command line options.

           If you are writing a module to expand an already
           existing set of modules, please coordinate with the
           author of the package.  It helps if you follow the
           same naming scheme and module interaction scheme as
           the original author.

       o   Try to design the new module to be easy to extend and
           reuse.

           Try to "use warnings;" (or "use warnings qw(...);").
           Remember that you can add "no warnings qw(...);" to
           individual blocks of code that need less warnings.

           Use blessed references.  Use the two argument form of
           bless to bless into the class name given as the first
           parameter of the constructor, e.g.,:

            sub new {
                my $class = shift;
                return bless {}, $class;
            }

           or even this if you'd like it to be used as either a
           static or a virtual method.

            sub new {
                my $self  = shift;
                my $class = ref($self) || $self;
                return bless {}, $class;
            }

           Pass arrays as references so more parameters can be
           added later (it's also faster).  Convert functions
           into methods where appropriate.  Split large methods
           into smaller more flexible ones.  Inherit methods from
           other modules if appropriate.

           Avoid class name tests like: "die "Invalid" unless ref
           $ref eq 'FOO'".  Generally you can delete the "eq
           'FOO'" part with no harm at all.  Let the objects look
           after themselves! Generally, avoid hard-wired class
           names as far as possible.

           Avoid "$r->Class::func()" where using "@ISA=qw(...
           Class ...)" and "$r->func()" would work (see perlbot
           for more details).

           Use autosplit so little used or newly added functions
           won't be a burden to programs that don't use them. Add
           test functions to the module after __END__ either
           using AutoSplit or by saying:

            eval join('',<main::DATA>) || die $@ unless caller();

           Does your module pass the 'empty subclass' test? If
           you say "@SUBCLASS::ISA = qw(w);" your appli-
           cations should be able to use SUBCLASS in exactly the
           same way as YOURCLASS.  For example, does your appli-
           cation still work if you change:  "$obj = new YOUR-
           CLASS;" into: "$obj = new SUBCLASS;" ?

           Avoid keeping any state information in your packages.
           It makes it difficult for multiple other packages to
           use yours. Keep state information in objects.

           Always use -w.

           Try to "use strict;" (or "use strict qw(...);").
           Remember that you can add "no strict qw(...);" to
           individual blocks of code that need less strictness.

           Always use -w.

           Follow the guidelines in the perlstyle(e) manual.

           Always use -w.

       o   Some simple style guidelines

           The perlstyle manual supplied with Perl has many help-
           ful points.

           Coding style is a matter of personal taste. Many peo-
           ple evolve their style over several years as they
           learn what helps them write and maintain good code.
           Here's one set of assorted suggestions that seem to be
           widely used by experienced developers:

           Use underscores to separate words.  It is generally
           easier to read $var_names_like_this than $VarNames-
           LikeThis, especially for non-native speakers of
           English. It's also a simple rule that works consis-
           tently with VAR_NAMES_LIKE_THIS.

           Package/Module names are an exception to this rule.
           Perl informally reserves lowercase module names for
           'pragma' modules like integer and strict. Other mod-
           ules normally begin with a capital letter and use
           mixed case with no underscores (need to be short and
           portable).

           You may find it helpful to use letter case to indicate
           the scope or nature of a variable. For example:

            $ALL_CAPS_HERE   constants only (beware clashes with Perl vars)
            $Some_Caps_Here  package-wide global/static
            $no_caps_here    function scope my() or local() variables

           Function and method names seem to work best as all
           lowercase.  e.g., "$obj->as_string()".

           You can use a leading underscore to indicate that a
           variable or function should not be used outside the
           package that defined it.

       o   Select what to export.

           Do NOT export method names!

           Do NOT export anything else by default without a good
           reason!

           Exports pollute the namespace of the module user.  If
           you must export try to use @EXPORT_OK in preference to
           @EXPORT and avoid short or common names to reduce the
           risk of name clashes.

           Generally anything not exported is still accessible
           from outside the module using the Module-
           Name::item_name (or "$blessed_ref->method") syntax.
           By convention you can use a leading underscore on
           names to indicate informally that they are 'internal'
           and not for public use.

           (It is actually possible to get private functions by
           saying: "my $subref = sub { ... };  &$subref;".  But
           there's no way to call that directly as a method,
           because a method must have a name in the symbol
           table.)

           As a general rule, if the module is trying to be
           object oriented then export nothing. If it's just a
           collection of functions then @EXPORT_OK anything but
           use @EXPORT with caution.

       o   Select a name for the module.

           This name should be as descriptive, accurate, and com-
           plete as possible.  Avoid any risk of ambiguity.
           Always try to use two or more whole words.  Generally
           the name should reflect what is special about what the
           module does rather than how it does it.  Please use
           nested module names to group informally or categorize
           a module.  There should be a very good reason for a
           module not to have a nested name.  Module names should
           begin with a capital letter.

           Having 57 modules all called Sort will not make life
           easy for anyone (though having 23 called Sort::Quick
           is only marginally better :-).  Imagine someone trying
           to install your module alongside many others.  If in
           any doubt ask for suggestions in comp.lang.perl.misc.

           If you are developing a suite of related mod-
           ules/classes it's good practice to use nested classes
           with a common prefix as this will avoid namespace
           clashes. For example: Xyz::Control, Xyz::View,
           Xyz::Model etc. Use the modules in this list as a nam-
           ing guide.

           If adding a new module to a set, follow the original
           author's standards for naming modules and the inter-
           face to methods in those modules.

           If developing modules for private internal or project
           specific use, that will never be released to the pub-
           lic, then you should ensure that their names will not
           clash with any future public module. You can do this
           either by using the reserved Local::* category or by
           using a category name that includes an underscore like
           Foo_Corp::*.

           To be portable each component of a module name should
           be limited to 11 characters. If it might be used on
           MS-DOS then try to ensure each is unique in the first
           8 characters. Nested modules make this easier.

       o   Have you got it right?

           How do you know that you've made the right decisions?
           Have you picked an interface design that will cause
           problems later? Have you picked the most appropriate
           name? Do you have any questions?

           The best way to know for sure, and pick up many help-
           ful suggestions, is to ask someone who knows.
           Comp.lang.perl.misc is read by just about all the peo-
           ple who develop modules and it's the best place to
           ask.

           All you need to do is post a short summary of the mod-
           ule, its purpose and interfaces. A few lines on each
           of the main methods is probably enough. (If you post
           the whole module it might be ignored by busy people -
           generally the very people you want to read it!)

           Don't worry about posting if you can't say when the
           module will be ready - just say so in the message. It
           might be worth inviting others to help you, they may
           be able to complete it for you!

       o   README and other Additional Files.

           It's well known that software developers usually fully
           document the software they write. If, however, the
           world is in urgent need of your software and there is
           not enough time to write the full documentation please
           at least provide a README file containing:

           o         A description of the module/package/exten-
                     sion etc.

           o         A copyright notice - see below.

           o         Prerequisites - what else you may need to
                     have.

           o         How to build it - possible changes to Make-
                     file.PL etc.

           o         How to install it.

           o         Recent changes in this release, especially
                     incompatibilities

           o         Changes / enhancements you plan to make in
                     the future.

           If the README file seems to be getting too large you
           may wish to split out some of the sections into sepa-
           rate files: INSTALL, Copying, ToDo etc.

           Adding a Copyright Notice.
               How you choose to license your work is a personal
               decision.  The general mechanism is to assert your
               Copyright and then make a declaration of how oth-
               ers may copy/use/modify your work.

               Perl, for example, is supplied with two types of
               licence: The GNU GPL and The Artistic Licence (see
               the files README, Copying, and Artistic).  Larry
               has good reasons for NOT just using the GNU GPL.

               My personal recommendation, out of respect for
               Larry, Perl, and the Perl community at large is to
               state something simply like:

                Copyright (c) 1995 Your Name. All rights reserved.
                This program is free software; you can redistribute it and/or
                modify it under the same terms as Perl itself.

               This statement should at least appear in the
               README file. You may also wish to include it in a
               Copying file and your source files.  Remember to
               include the other words in addition to the Copy-
               right.

           o   Give the module a version/issue/release number.

               To be fully compatible with the Exporter and Make-
               Maker modules you should store your module's ver-
               sion number in a non-my package variable called
               $VERSION.  This should be a floating point number
               with at least two digits after the decimal (i.e.,
               hundredths, e.g, "$VERSION = "0.01"").  Don't use
               a "1.3.2" style version.  See Exporter for
               details.

               It may be handy to add a function or method to
               retrieve the number.  Use the number in announce-
               ments and archive file names when releasing the
               module (ModuleName-1.02.tar.Z).  See perldoc ExtU-
               tils::MakeMaker.pm for details.

           o   How to release and distribute a module.

               It's good idea to post an announcement of the
               availability of your module (or the module itself
               if small) to the comp.lang.perl.announce Usenet
               newsgroup.  This will at least ensure very wide
               once-off distribution.

               If possible, register the module with CPAN.  You
               should include details of its location in your
               announcement.

               Some notes about ftp archives: Please use a long
               descriptive file name that includes the version
               number. Most incoming directories will not be
               readable/listable, i.e., you won't be able to see
               your file after uploading it. Remember to send
               your email notification message as soon as possi-
               ble after uploading else your file may get deleted
               automatically. Allow time for the file to be pro-
               cessed and/or check the file has been processed
               before announcing its location.

               FTP Archives for Perl Modules:

               Follow the instructions and links on:

                  http://www.cpan.org/modules/00modlist.long.html
                  http://www.cpan.org/modules/04pause.html

               or upload to one of these sites:

                  https://pause.kbx.de/pause/
                  http://pause.perl.org/pause/

               and notify <modules@perl.org>.

               By using the WWW interface you can ask the Upload
               Server to mirror your modules from your ftp or WWW
               site into your own directory on CPAN!

               Please remember to send me an updated entry for
               the Module list!

           o   Take care when changing a released module.

               Always strive to remain compatible with previous
               released versions.  Otherwise try to add a mecha-
               nism to revert to the old behavior if people rely
               on it.  Document incompatible changes.

       Guidelines for Converting Perl 4 Library Scripts into Mod-
       ules


       o   There is no requirement to convert anything.

           If it ain't broke, don't fix it! Perl 4 library
           scripts should continue to work with no problems. You
           may need to make some minor changes (like escaping
           non-array @'s in double quoted strings) but there is
           no need to convert a .pl file into a Module for just
           that.

       o   Consider the implications.

           All Perl applications that make use of the script will
           need to be changed (slightly) if the script is con-
           verted into a module.  Is it worth it unless you plan
           to make other changes at the same time?

       o   Make the most of the opportunity.

           If you are going to convert the script to a module you
           can use the opportunity to redesign the interface.
           The guidelines for module creation above include many
           of the issues you should consider.

       o   The pl2pm utility will get you started.

           This utility will read *.pl files (given as parame-
           ters) and write corresponding *.pm files. The pl2pm
           utilities does the following:

           o         Adds the standard Module prologue lines

           o         Converts package specifiers from ' to ::

           o         Converts die(...) to croak(...)

           o         Several other minor changes

           Being a mechanical process pl2pm is not bullet proof.
           The converted code will need careful checking, espe-
           cially any package statements.  Don't delete the orig-
           inal .pl file till the new .pm one works!

       Guidelines for Reusing Application Code


       o   Complete applications rarely belong in the Perl Module
           Library.

       o   Many applications contain some Perl code that could be
           reused.

           Help save the world! Share your code in a form that
           makes it easy to reuse.

       o   Break-out the reusable code into one or more separate
           module files.

       o   Take the opportunity to reconsider and redesign the
           interfaces.

       o   In some cases the 'application' can then be reduced to
           a small

           fragment of code built on top of the reusable modules.
           In these cases the application could invoked as:

                % perl -e 'use Module::Name; method(@ARGV)' ...
           or
                % perl -mModule::Name ...    (in perl5.002 or higher)


NOTE
       Perl does not enforce private and public parts of its mod-
       ules as you may have been used to in other languages like
       C++, Ada, or Modula-17.  Perl doesn't have an infatuation
       with enforced privacy.  It would prefer that you stayed
       out of its living room because you weren't invited, not
       because it has a shotgun.

       The module and its user have a contract, part of which is
       common law, and part of which is "written".  Part of the
       common law contract is that a module doesn't pollute any
       namespace it wasn't asked to.  The written contract for
       the module (A.K.A. documentation) may make other provi-
       sions.  But then you know when you "use RedefineTheWorld"
       that you're redefining the world and willing to take the
       consequences.



perl v5.6.1                 2001-03-19              PERLMODLIB(B)