Perl is a widely used language for system maintenance, CGI programming, prototyping, and many other functions. Because it is so widely used, many programming examples are available. These range from entire programs to code libraries (modules) that can be used in your programs.
The module extends the Perl 4 concept of packages in Perl 5 to implement a new, standardized form of reusable software. These modules are kept in various archives on the Internet. In addition, there are several home pages devoted to Perl programming that contain links to module archives. This appendix details the resources available at the time of its writing.
Please note: This is not an attempt to detail every module archive. These archive sites represent a major portion of the available sites. Modules, code samples, and complete Perl programs are being produced at a steady pace. Newer archives and some older ones are certain to be missed by this appendix. If I have missed your site, I apologize. The best way to find these sites is to start with the sources listed here and explore.
The Comprehensive Perl Archive Network (CPAN) was established to provide a place where these modules could be organized and retrieved. The basic principle of CPAN is being distributed. It would be impossible to coordinate the numerous resources so that all the people contributing Perl material could enter their contributions into some central site. Therefore, most of the contents of the CPAN are mirrored from other sites; CPAN just pulls all the various resources together and layers them into a coherent whole.
Here are the sites available at the time of this writing; this information is likely to change the the time this book is published. The master CPAN site is at ftp://ftp.funet.fi/ (Finland, Europe). Select the site nearest to you from the following list to get the best response time and bandwidth. As an alternative, use http://www.perl.com/CPAN, which tries to guess the nearest site for you based on your host's Internet domain name.
All the files under each of the directories in this list should be identical at all these sites because they are all automatically maintained mirrors of the master CPAN site.
If you can't find what you want, or want to check that what you've found is the latest version, you can contact the person associated with the module. These are also listed at the site and with the particular module in which you are interested.
The CPAN archives are mirrored and, except for brief periods, are identical. Here is the organization:
File/Directory | Comment |
README.html | The main document. |
ENDINGS | What to do about files with weird endings. |
CPAN.html | The list of sites from which CPAN is building itself. |
RECENT.html | The recent arrivals. |
ROADMAP.html | Organization of the CPAN sites. |
authors/ | Modules/extensions by author. |
clpa/ | comp.lang.perl.announce Usenet newsgroup archives. |
doc/ | Documentation. |
indices/ | Various index views of CPAN. |
misc/ | Miscellanea. |
modules/ | Modules/extensions. |
ports/ | Non-UNIX Perl ports, both as executables and source. |
scripts/ | Do not reinvent the wheel if you can avoid it. |
src/ | Source code and patches for Perl itself (and for some auxiliary utilities). |
The basic archives are organized in three ways:
You can send feedback by e-mail to the CPAN administrators:
cpan-adm@ftp.funet.fi.
In order to examine these archives more fully, let's look at some examples by category.
I won't attempt to list all the available archives. By the time you read this, the contents will, hopefully, be greatly expanded. The modules are organized into several categories. These are detailed in a following section titled "Perl 5 Module List." This list is an excellent resource and is updated and issued periodically.
One important note: many of these modules are works in progress. When you choose to implement a module, be sure to read the accompanying documentation. Many are alpha and beta releases of modules or implement interfaces to standards that are, themselves, changing. Be careful, know what you are dealing with, and approach these modules with an open, informed attitude. If you have questions, contact the person responsible for the module.
The subsections that follow describe these broad categories. Some examples of the modules are presented in each category.
These modules deal with modifying/handling the Perl core, adding extensions to the Perl language, and documenting the language. An example is the Opcode module, which provides functions for the manipulation of sets of Perl opcodes, including the capability to mask (disable) sets of opcodes.
These modules deal with using Perl for development; for example, Devel::embed, which provides utility functions for embedding a Perl interpreter and extensions in your C/C++ applications.
These are Perl modules that deal with specific operating systems or classes of operating systems. An example is BSD-resource, which is a Perl extension that implements the BSD process resource limit functions
and the BSD process priority functions
These are modules that allow/extend Perl to perform networking, modem control, and interprocess communication. SNMP is a Perl 5 extension module that provides an interface to the CMU-SNMPv2 library. There are also modules for implementing FTP and TCP interfaces.
These are extensions related to data types and their manipulation. For related modules, see the next section, "Database Interfaces." Here's a list of the extensions:
These are extensions to interface with databases. Many utilize the database interface (DBI), which provides a common interface to database drivers for various database engines. Drivers planned or being developed include
Database | Author/E-mail Address |
Oracle | Tim Bunce <Tim.Bunce@ig.co.uk> |
Ingres | Tim Bunce <Tim.Bunce@ig.co.uk> |
mSQL | Alligator Descartes <descarte@mcqueen.com> |
Informix | Alligator Descartes <descarte@mcqueen.com> |
Interbase | Bill Karwin <bkarwin@interbase.borland.com> |
DB2 | Mike <mhm@austin.ibm.com> |
In addition, extensions are available for Sybase, msql, and Xbase.
These modules include both graphic and text interfaces. The modules include
These modules are interfaces to or emulations of other programming languages. At this writing, there are two categories: prolog and TCL.
All things having to do with files (with the exception of file handles, which are categorized with directories in a following section). File::Tools is a package that implements several file operations under a single umbrella. Libwww-perl is a collection of Perl modules that provides a simple and consistent programming interface (API) to the World Wide Web. There are also several file-locking modules.
String- and text-processing extensions seem a little silly in a language that is optimized for text processing. But the modules in this category do serve a purpose.
This category includes parsing and searching modules. There are font-handling utilities included in this category. SGMLS.pm is a Perl 5 class library for parsing the output from James Clark's SGMLS and NSGMLS parsers. Modules include approximate string-matching capabilities and emulation of the C scanf function.
The text-processing modules include
These are modules to process options, arguments, and configuration files. ConfigReader is a set of classes for reading configuration files. The programmer can easily specify the directives to be read, as well as their default values and a parsing function or method to use. There are also a set of modules for processing both long and short (GNU-style) options.
One of a set of security modules. See the network section for additional modules. There are modules for DES, MD5, and PGP handling/interfaces.
These include HTML, HTTP, CGI, MIME processing and more. Because much of Web page processing is basic text processing, many of the text-processing modules are also helpful. Some of the more useful modules deal with the inconsistencies in HTTP daemons, provide CGI interfaces, and process various MIME types.
UNIX, in general, and the Internet, specifically, depend on servers and daemons to perform much of their processing. These modules interface with or implement servers and daemons.
These modules perform image processing and bitmap manipulation. GD is an interface to the GD library that can create GIF images on-the-fly. OpenGL is a module that allows a Perl program to use OpenGL by letting it make function calls. pgperl is a version of the Perl language that has the PGPLOT FORTRAN library available, a very popular package for plotting astronomical data.
SMTP mail and Usenet news are essentially a set of text streams. Because Perl is optimized to handle text, it is an obvious choice for manipulating mail and news. Mailtools implements a set of tools for mail processing. POP3Client is, as its name applies, a post office protocol (POP) version 3 client. There are also a couple of NNTP clients and news-handling modules.
These modules implement callbacks and handle exceptions. For example, Religion provides simplified access to $SIG{__DIE__} and $SIG{__WARN__}, which allow control over what happens when a die() or warn() occurs and (as a side effect) enhance the standard error messages, which is especially useful if you are dealing with eval()s.
These deal with directories and file handles as well as input/output stream utilities.
Here is everything else. Because of its ease of use and versatility, Perl is being used in many different ways. At the time of this writing, there are utilities to implement an Archie server/client. There is a routine to interface to freeWAIS and implement a chat client. There is also a module that provides two interfaces to the Remedy Action Request System. The first is a basic interface to the C API provided with the AR system (Remedy::Ar). The second is an object-oriented version of the same (Remedy::Ar::Server and Remedy::Ar::Schema). There is also a Gann Neural Network C++ library and Perl extension.
If you program for Perl 5, you might want to get a copy of the Perl 5 Module list maintained by Tim Bunce <Tim.Bunce@ig.co.uk>.
Introduction to the Perl 5 Module List |
This document is a semi-formal list of Perl 5 modules. The Perl 4 concept of packages has been extended in Perl 5, and a new standardized form of reusable software components has been defined: the Module. Perl 5 modules typically conform to certain guidelines that make them easier to use, reuse, integrate, and extend. The list is posted to comp.lang.perl.announce and comp.answers on a semi-regular basis. It has two key aims:
This list includes the Perl 5 standard modules, other completed modules, work-in-progress modules, and would-be-nice-to-have ideas for modules. It also includes guidelines for those wishing to create new modules, including how to name them. |
To give you an idea what can be found on the list, here is the
table of contents from revision 2.21 dated March 21, 1996. The
list is posted periodically to the comp.lang.perl.announce
and comp.answers newsgroups.
Contents
Introduction
Where Are The Modules Kept?
Playing Your Part
How To Get a More Recent Copy of the List
Editorial Information and Copyright
Part 1 - Modules: Creation, Use and Abuse
1) Perl 5 Module Terminology
2) Guidelines for Module Creation
3) Guidelines for Converting Perl 4 Library Scripts into Modules
4) Guidelines for Reusing Application Code
Part 2 - The Perl 5 Module List
1) Module Listing Format
2) Perl Core Modules, Perl Language Extensions and Documentation Tools
3) Development Support
4) Operating System Interfaces
5) Networking, Device Control (modems) and InterProcess Communication
6) ! Data Types and Data Type Utilities
7) Database Interfaces
8) User Interfaces
9) Interfaces to or Emulations of Other Programming Languages
10) File Names, File Systems and File Locking (see also File Handles)
11) String Processing, Language Text Processing, Parsing and Searching
12) Option, Argument, Parameter and Configuration File Processing
13) Internationalization and Locale
14) Authentication, Security and Encryption
15) World Wide Web, HTML, HTTP, CGI, MIME
16) Server and Daemon Utilities
17) Archiving, Compression and Conversion
18) Images, Pixmap and Bitmap Manipulation, Drawing and Graphing
19) Mail and Usenet News
20) Control Flow Utilities (callbacks and exceptions etc)
21) File Handle and Input/Output Stream Utilities
22) Microsoft Windows Modules
23) Miscellaneous Modules
Part 3 - Big Projects Registry
1) Introduction
2) Items in the Todo File
3) Perl Compiler
4) Multi-threading
5) Object Management Group CORBA & IDL
6) Expand Tied Array Interface
7) Tied File Handles
8) Extend Yacc To Write XS Code
9) Updatable Module List via WWW Forms
10) Approximate Matching Regular Expressions
Part 4 - Who's Who and What's Where
1) ! Information / Contact Reference Details
2) Perl Frequently Asked Questions (FAQ) Files
3) Other Perl Archive Sites
Key: '+' indicates a new section or item,
'!' indicates a changed section or item (typically new modules).
Again, because Perl is a popular language designed to get things done, there is a lot of help out there. It is likely that someone has done what you are attempting or has done something similar and can point you to a code example or module similar to the one you are designing.
Newsgroups are a good place to interact with these resources and a good place to find out about new modules available at the various sites. You might want to start with these newsgroups when you are looking for a particular module or need help with your Perl programming.
One note: there appears to be a great deal of cross-posting in these newsgroups. If you look to these groups to find something (and you probably will have to examine them all), you'll have to wade through a lot of cross-postings to find the "good stuff."
Newsgroup | Comment |
comp.lang.perl... | This set of newsgroups covers information about Perl in general. Much of the discussion in the specific groups covers using Perl for utility purposes and also as a CGI scripting language. Presumably, any new newsgroup started will be under this high-level structure. |
comp.lang.perl.announce | Information about Perl itself and new modules for Perl programming. |
comp.lang.perl | The main newsgroup about Perl. This is a good place to start when you're looking for Perl information. |
comp.lang.perl.modules | Discussions of Perl modules. This newsgroup also contains information about new/revised Perl modules available. |
comp.lang.perl.misc | Intended as a place where discussions that don't fit in the other newsgroups end up. However, it seems mostly to be a place where cross-postings end up. |
comp.lang.perl.modules | Discussions of Perl modules. This newsgroup also contains information about new/revised Perl modules available. |
comp.lang.perl.tk | Discussions of tk use with Perl. |
Here are Web pages devoted to Perl. They can be good sources of information and modules. If I have missed your site (or your favorite site), I apologize. Any attempt to compile a "complete" list of any type on the Internet is futile. (The Open Text Search Index returned 13,035 references for Perl.)
These are examples of the large amount of information available on the Web about Perl. Many contain links and are valuable starting points for resources. They are presented in alphabetical order with my comments:
Web Page Title | Address/Content |
Adam Rifkin's Perl | http://www.cs.caltech.edu/~adam/LOCAL/perl.html Perl links. |
Andy Dougherty's Perl 5 Page | http://www.lafayette.edu/doughera/doughera/perl/ perl.html Perl 5 links. |
An Introduction to Perl | http://www.spu.edu/tech/basic-perl/ |
Computers and Internet: | http://www.yahoo.com/Computers/World_Wide_Web/ |
Internet:World Wide Web:
Programming:Perl Scripts | Programming/Perl_Scripts/ |
Index of Perl/HTML | http://www.seas.upenn.edu/~mengwong/perl.html |
Archives | Links to scripts and archives involving HTML. |
Jeffrey's Perl Stuff | http://www.wg.omron.co.jp/~jfriedl/perl/index.html
A collection of Perl written by Jeffrey. |
Lincoln Stein's Homepage | http://www-genome.wi.mit.edu/~lstein/ Perl utilities. |
Malcolm Beattie's work on Perl 5 |
http://users.ox.ac.uk/~mbeattie/ Information on the Tk extension to Perl. |
Matt Kruse's Perl Scripts | http://web.sau.edu/~mkruse/www/scripts/
Original scripts by Kruse. Here is his introduction: "Welcome to my page of Perl scripts! I think I have some good scripts below, and I hope you find them useful. I don't claim to be a Perl master, or even an experienced programmer. But my emphasis is developing applications that are original, useful, and challenging to me. I can always learn to program better (and I always am), but originality and conceptual design are, in my opinion, things that aren't as easy to learn." |
Web Page Title | Address/Content |
Matt's Script Archive | http://worldwidemart.com/scripts/ It seems as if people named Matt are into Perl programming. This is a different Matt, but the same concept - as Kruse's page. These are specifically for the Web. |
Perl | http://www.ecst.csuchico.edu/mrproof/perl.html Perl links. |
Perl for Win32 | http://www.perl.hip.com/ Information on the specific Perl implementation for Windows 95/NT. |
Perl Language Homepage | http://www.perl.com/perl/index.html A great deal of information about Perl. Search for Perl archives and more. |
Perl on VMS | http://bkfug.kfunigraz.ac.at/~binder/perl.html |
Perl Pages | http://www.metamall.com/rets/perl.html
A small site with a mailer and BBS package for WWW. |
Perl Program for Retrieving | http://uts.cc.utexas.edu/~zippy/url_get.html |
Web Documents | A site devoted to this particular Perl script. |
Perl Reference Materials | http://www.eecs.nwu.edu/perl/
A list of reference materials including books, online guides, FAQs, the man page, newsgroups, archives, and other resources. |
perlWWW | http://www.oac.uci.edu/indiv/ehood/perlWWW/ Perl goodies related to the WWW. |
Perl5 | http://reality.sgi.com/scotth/info/perl5.html Information on and links to Perl version 5 for IRIX. |
Pernicious Perl Page | http://www.valleynet.com/~rickh/perl.html A growing set of links about Perl on the Web. |
SCG Script Archives | http://iamwww.unibe.ch/~scg/Src/ Currently contains modules useful to maintaining WWW documents. |
THE PERL DATA | http://mox.perl.com/perl/pdsc/index.html |
STRUCTURES COOKBOOK | By Tom Christiansen. Here is his description: "This is a cookbook of recipes for building up complex data structures in Perl. It has been extracted from a much larger and more expository document to be published in pod format and included with the standard Perl distribution. The goal is to provide cookbook-like, cut-and-paste examples of the most often used data structures in Perl." |
Web Page Title | Address/Content |
The Perl Packrats | http://www.metronet.com/1h/perlinfo/other- archives.html A semi-complete listing of Perl archives. |
Web Developer's Virtual | http://www.charm.net/~web/Vlib/Providers/Perl.html |
Library:Perl | Perl links. |
Web Hacking Scripts | http://www.perl.com/perl/scripts/html-hacking.html
Interesting scripts from Tom Christensen. |
Web Weaver's Warren | http://fox.nstn.ca/~tmonk/weaver/perl_rlt.html A Perl-related archive. |
Webstars:Perl | http://www.stars.com/WebStars/Perl.html Perl links. |
Yahoo! - Computers and Internet:Languages:Perl | http://www.yahoo.com/Computers/Languages/Perl Yahoo! is one of the Web's most noted search indexes. This page lists Perl links from that resource. |
Like many things on the Internet, there are FAQs maintained about Perl. They can be useful in determining what is available and what can be done. These FAQs are posted periodically in the Perl newsgroups. Here are two with sources at the time of this writing.
The meta-FAQ is a list detailing other resources and FAQs. This is a good source if you are looking for a version of Perl for a specific platform or with a particular capability:
http://www.khoros.unm.edu/staff/neilb/perl/metaFAQ
http://www.cse.unsw.edu.au/perl/metaFAQ.html
http://web.nexor.co.uk/perl/Meta-FAQ.txt
The main FAQ for the Perl language. It contains questions about programming, sources of modules, and more on the Perl language:
http://mox.perl.com/perl/faq
ftp://rtfm.mit.edu/pub/usenet/news.answers/perl-faq/
ftp://ftp.uu.net/usenet/news.answers/perl-faq/
ftp://ftp.cis.ufl.edu/pub/perl/doc/FAQ
ftp://ftp.khoros.unm.edu/pub/perl/faq.gz
ftp://ftp.cs.ruu.nl/pub/NEWS.ANSWERS/perl-faq/
ftp://ftp.funet.fi/pub/languages/perl/doc/faq
ftp://src.doc.ic.ac.uk/packages/perl/FAQ
At the time of this writing, there are a number of mailing lists related to Perl.
This list is for discussion of Perl 5 design and porting issues. Subscribe by e-mailing majordomo@nicoh.com with subscribe perl5-porters {your mail address}.
These lists are used to discuss issues involving Windows NT and Perl 5. Subscribe by e-
mailing Majordomo@mail.hip.com with subscribe {perl-win32|perl-win32-users|perl-win32_announce} {your mail address}.
This list is for discussions related to archiving of Perl materials, particularly the Comprehensive Perl Archive Network (CPAN). Subscribe by e-mailing perl-packrats-request@metronet.com with subscribe perl-packrats {your mail address}.
This list is for discussion related to using ExtUtils::MakeMaker.pm to build and install Perl 5 extensions and for disributing patches to this module. Subscribe by e-mailing majordomo@franz.ww.TU-Berlin.DE with subscribe makemaker {your mail address}.
This list is for people working on and with the Tk modules in Perl. Subscribe by e-mailing ptk-request@wpi.edu with subscribe ptk {your mail address}.
This mailing list is for developers working on Perl CGI modules. Subscribe by e-mailing CGI-perl-request@webstorm.com with subscribe CGI-perl {your mail address}.
This mailing list is for developers working on or using libwww-perl. Subscribe by e-mailing libwww-perl-request@ics.UCI.EDU with subscribe libwww-perl {your mail address}.
Send mail to
This mailing list is for discussions related to Perl on the Mac. Send mail to mac-perl-request@iis.ee.ethz.ch with the body subscribe.
Of course, you can use any of the Internet search engines out there. You might want to limit your searches, however. As mentioned, when I selected Perl at the Open Text Index, I received over 13,000 hits! I'd suggest that you use Perl along with other keywords describing the type of module you are looking for. For example, by specifying both Perl and modules, the number of hits was reduced to 45.
There are other resources on the Internet. Again, not complete, but a good starting point.
Site | Address/Comment |
Sunsite Perl Archives | ftp://sunsite.unc.edu/pub/languages/perl Check the INDEX for the table of contents. Mirrors the defunct Coombs archive. |
Ohio State University | ftp://archive.cis.ohio-state.edu/pub/perl/ |
Software Research | ftp://sra.co.jp/pub/lang/perl/ |
Associates | Besides scripts, this site also archives various versions of Perl, including those for MS-DOS (4.036), PerlMac, and Windows NT |
InfoWire | ftp://ftp.infowire.com/pub/ntperl/
This site includes modules for Win32 Perl, including an ODBC interface module. |
The number of Perl resources is growing on the Internet, primarily due to the popularity and utility of this language. Use this appendix as a starting point for your Perl search. In addition, check my personal Perl page at
http://www.channel1.com/users/rbreed01/tab10.htm
I will try not to duplicate the other resources on the Net, but will attempt to keep up with additional and informative Perl resources (as well as post a couple of my own Perl scripts).