★ wanayoo — archive 1999 http://www.lns.cornell.edu/~pvhp/perl/00modlist.long.htmlNouvelle recherche | Portail wanayoo

The Perl 5 Module List

Maintained by Tim Bunce and Andreas König <modules@perl.com>;
Revision: 2.28 $Date: 1996/07/25 17:29:55 $

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) Multi-threading
4) Object Management Group CORBA & IDL
5) Expand Tied Array Interface
6) Tied File Handles
7) Extend Yacc To Write XS Code

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).


Introduction

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 standardised form of reusable software component has been defined: the Module.

Perl 5 Modules typically conform to certain guidelines which make them easier to use, reuse, integrate and extend.

This list will be posted to comp.lang.perl.announce and comp.answers on a semi-regular basis. It has two key aims:

1. FOR DEVELOPERS: To change duplication of effort into cooperation.

2. FOR USERS: To quickly locate existing software which can be reused.

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.

Where Are The Modules Kept?

Most, but not all, of the modules can be found within CPAN, the Comprehensive Perl Archive Network of mirrored FTP sites. Within the CPAN scheme the modules described in this list can be found in the modules/ directory below the CPAN root directory. These are the currently registered CPAN sites:

See CPAN.html on your CPAN site.

All the files under each of the directories listed above should be identical at all these sites since they are all automatically maintained mirrors of the master CPAN site. Please use which ever site is 'nearest' you.

NOTE: If you can't find what you want, or wish to check that what you've found is the latest version, or wonder why a module mentioned in this list is not on CPAN, you should contact the person associated with the module (and not the maintainers of the archives or this list). Contact details are given at the start of Part 4.

For navigating through CPAN you may find the file modules/01modules.index.html a useful starting place. Or you may prefer a webified version of this modulelist in the file modules/00modlist.long.html on the CPAN servers. There's more than one way to do it :-)

Playing Your Part

Perl is a huge collaborative effort. Everyone who uses perl is benefiting from the contributions of many hundreds, maybe thousands, of people. How much time has perl saved you since you started using it?

Do you have any modules you could share with others? For example, you may have some perl4 scripts from which generally useful, and reusable, modules could be extracted. There may be many people who would find your work very useful. Please play you part and contribute to the Perl community where you can. [ end of sermon :-]

Help save the world! Please submit new entries and updates to us so we can keep this list up-to-date. We would prefer changes to be submitted as context diff's (or just plain diff if your diff does not have a context diff option) by email to modules@perl.com (or modules@franz.ww.tu-berlin.de in case the above doesn't work). No tabs please. Don't forget to upload your module to the PAUSE site for forwarding on to CPAN. See section 2.9.

How To Get a More Recent Copy of the List

This Module List is posted to comp.lang.perl.announce, comp.answers and news.answers bi-weekly with a long expiry time (over a month). The first place to look for a more recent copy is therefore your own Usenet spool area.

You should be able to get a copy from one of these places:

An HTML version that is usually in sync with the posted version can be obtained at http://www.perl.com/CPAN/modules/00modlist.long.html

Editorial Information and Copyright

This document is Copyright (c) 1996 by Tim Bunce and Andreas König. All rights reserved. Permission to distribute this document, in full or part, via electronic means (emailed, posted or archived) or printed copy is granted providing that no charges are involved, reasonable attempt is made to use the most current version, and all credits and copyright notices are retained. Requests for other distribution rights, including incorporation in commercial products, such as books, magazine articles, or CD-ROMs should be made to Tim.Bunce@ig.co.uk and Andreas.Koenig@mind.de .

Disclaimer: The content of this document is simply a collection of information gathered from many sources with little or no checking. There are NO warranties with regard to this information or its use.

A little background information... I (Tim) created the Module List in August 1994 and maintained it manually till April 1996. By that time Andreas had implemented the Perl Authors Upload Server (PAUSE) and it was happily feeding modules through to the CPAN archive sites (see http://franz.ww.tu-berlin.de/modulelist for details). Since PAUSE held a database of module information which could be maintained by module authors it made sense for the module listing part of the Module List to be built from that database. In April 1996 Andreas took over the automatic posting of the Module List and I now maintain the other parts of the text. We plan to add value to the automation over time.

Part 1 - Modules: Creation, Use and Abuse

1) Perl 5 Module Terminology (a larry-terminology-mini-tutorial)

Perl 5 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" methods), 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 module might set up an AUTOLOAD function to slurp in subroutine definitions on demand, but this is also transparent. Only the .pm file is required to exist.

2) Guidelines for Module Creation

2.1 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.

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

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 hardwired class names as far as possible.

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

Use autosplit so little used or newly added functions won't be a burden to programs which 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 sub-class' test? If you say "@SUBCLASS::ISA = qw(YOURCLASS);" your applications should be able to use SUBCLASS in exactly the same way as YOURCLASS. For example, does your application still work if you change: $obj = new YOURCLASS; 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 which need less strictness. Always use -w. Always use -w! Follow the guidelines in the perlstyle(1) manual.

2.3 Some simple style guidelines

The perlstyle manual supplied with perl has many helpful points.

Coding style is a matter of personal taste. Many people 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 $VarNamesLikeThis, especially for non-native speakers of English. It's also a simple rule that works consistently 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 modules 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.

For method calls use either

$foo = new Foo $arg1, $arg2; # no parentheses $foo = Foo->new($arg1, $arg2);
but avoid the ambiguous form

$foo = new Foo($arg1, $arg2); # Foo() looks like function call
On how to report constructor failure, Larry said:

I tend to see it as exceptional enough that I'll throw a real Perl exception (die) if I can't construct an object. This has a couple of advantages right off the bat. First, you don't have to check the return value of every constructor. Just say "$fido = new Doggie;" and presume it succeeded. This leads to clearer code in most cases.

Second, if it does fail, you get a better diagnostic than just the undefinedness of the return value. In fact, the exception it throws may be quite rich in "stacked" error messages, if it's rethrowing an exception caught further in.

And you can always catch the exception if it does happen using eval {}.

If, on the other hand, you expect your constructor to fail a goodly part of the time, then you shouldn't use exceptions, but you should document the interface so that people will know to check the return value. You don't need to use defined(), since a constructor would only return a true reference or a false undef. So good Perl style for checking a return value would simply say

$conn = new Connection $addr or die "Couldn't create Connection";
In general, make as many things meaningful in a Boolean context as you can. This leads to straightforward code. Never write anything like

if (do_your_thing() == OK)
in Perl. That's just asking for logic errors and domain errors. Just write

if (do_your_thing())
Perl is designed to help you eschew obfuscation, if that's your thing.

2.4 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 ModuleName::item_name (or $blessed_ref->method) syntax. By convention you can use a leading underscore on names to informally indicate 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, since 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.

2.5 Select a name for the module.

This name should be as descriptive, accurate and complete 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.

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.

Please use a nested module name to informally group or categorise a module, e.g., placing a sorting module into a Sort:: category. A module should have a very good reason not to have a nested name. Please avoid using more than one level of nesting for module names (packages or classes within modules can, of course, use any number).

Module names should begin with a capital letter. Lowercase names are reserved for special modules such as pragmas (e.g., lib and strict).

Note that module names are not related to class hierarchies. A module name Foo::Bar does not in any way imply that Foo::Bar inherits from Foo. Nested names are simply used to provide some useful categorisation for humans. The same is generally true for all package names.

If you are developing a suite of related modules/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 naming guide.

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

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

2.6 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 helpful suggestions, is to ask someone who knows. The comp.lang.perl.misc and comp.lang.perl.modules Usenet newsgroups are read by just about all the people who develop modules and they are the best place to ask.

All you need to do is post a short summary of the module, 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!

2.7 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:

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

2.8 Adding a Copyright Notice.

How you choose to licence your work is a personal decision. The general mechanism is to assert your Copyright and then make a declaration of how others may copy/use/modify your work.

Perl, for example, is supplied with two types of licence: The GNU GPL and The Artistic License (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 simply state something like:

Copyright (c) 1996 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 Copyright.

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

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

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

2.10 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 you should place the module into a major ftp archive and include details of it's location in your announcement.

Some notes about ftp archives: Please use a long descriptive file name which 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 possible after uploading else your file may get deleted automatically. Allow time for the file to be processed and/or check the file has been processed before announcing its location.

FTP Archives for Perl Modules:

Follow the instructions and links on

http://franz.ww.tu-berlin.de/modulelist

or upload to one of these sites:

and notify upload@franz.ww.tu-berlin.de .

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!

2.11 Take care when changing a released module.

Always strive to remain compatible with previous released versions (see 2.2 above) Otherwise try to add a mechanism to revert to the old behaviour if people rely on it. Document incompatible changes.

3) Guidelines for Converting Perl 4 Library Scripts into Modules

3.1 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.

3.2 Consider the implications.

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

3.3 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.

3.4 The pl2pm utility will get you started.

This utility will read *.pl files (given as parameters) and write corresponding *.pm files. The pl2pm utilities does the following: Being a mechanical process pl2pm is not bullet proof. The converted code will need careful checking, especially any package statements. Don't delete the original .pl file till the new .pm one works!

4) Guidelines for Reusing Application Code

4.1 Complete applications rarely belong in the Perl Module Library.

4.2 Many applications contain some perl code which could be reused. Help save the world! Share your code in a form that makes it easy to reuse.

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

4.4 Take the opportunity to reconsider and redesign the interfaces.

4.5 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:

Part 2 - The Perl 5 Module List

The remainder of this document is divided up into sections. Each section deals with a particular topic and lists all known modules related to that topic. Modules are only listed in one section so check all sections that might related to your particular needs.

All the information corresponds to the latest updates we have received. We don't record the version number or release dates of the listed Modules. Nor do we record the locations of these Modules. Consult the contact, try the usual perl CPAN sites or ask in comp.lang.perl.misc. Please do *not* ask us directly, we simply don't have the time. Sorry.

1) Module Listing Format

Each Module listing is very short. The main goal is to simply publish the existence of the modules, or ideas for modules, and enough contact information for you to find out more. Each listing includes some characters which convey (approximate) basic status information.

For example:

Name           DSLI  Description                                  Info
-------------  ----  -------------------------------------------- -----
Fcntl          Sdcf  Defines fcntl() constants (see File::Lock)   JHI

Where the 'DSLI' characters have the following meanings:

Where letters are missing they can usually be inferred from the others. For example 'i' implies 'id', 'S' implies 'Su'.

The Info column gives a contact reference 'tag'. Lookup this tag in the "Information / Contact Reference Details" section in Pert 3 of this document. If no contact is given always try asking in comp.lang.perl.misc.

Most Modules are nested in categories such as IPC::Open2 and IPC::Open3. These are shown as 'IPC::' on one line then each module listed below with a '::' prefix.

Ideas For Adoption

Modules listed as in the 'i' Development Stage with no contact reference are ideas without an owner. Feel free to 'adopt' these but please let me know so that we can update the list and thus inform anyone else who might be interested. Adoption simply means that you either hope to implement the module one day or would like to cooperate with anyone else who might be interested in implementing it.

Cooperation

Similarly, if an idea that interests you has been adopted by someone please contact them so you can share ideas. Just because an idea has been adopted does NOT imply that it's going to be implemented. Just because a module is listed and being implemented does NOT mean it'll get finised. Waiting silently in the hope that the Module will appear one day is unlikely to be fruitful! Offer to help. Cooperate. Pool your efforts. Go on, try it!

The same applies to modules in all states. Most modules are developed in limited spare time. If you're interested in a module don't just wait for it to happen, offer to help.

Module developers should feel free to announce incomplete work early. If you're not going to be able to spend much time on something then say so. If you invite cooperation maybe someone will implement it for you!

2) Perl Core Modules, Perl Language Extensions and Documentation Tools

Name           DSLI  Description                                  Info
-----------    ----  -------------------------------------------- -----
CORE           Sucf  Internal package for perl native functions   P5P
UNIVERSAL      SucO  Internal universal base-class                JACKS
SUPER          SucO  Internal class to access superclass methods  P5P
DynaLoader     SucO  Dynamic loader for shared libraries          P5P
AutoLoader     SupO  Automatic function loader (using AutoSplit)  P5P
SelfLoader     SdpO  Automatic function loader (using __DATA__)   JACKS
Exporter       SupO  Implements default import method for modules P5P
Carp           Supf  Throw exceptions outside current package     P5P
Config         Supf  Stores details of perl build configuration   P5P
English        Supf  Defines English names for special variables  P5P
Symbol         SupO  Create 'anonymous' symbol (typeglobs) refs   CHIPS
Opcode         adpf  Disable named opcodes when compiling code    TIMB

Perl Pragmatic Modules

strict         Supf  Controls averments (similar to pragmas)      P5P
integer        Supf  Controls float vs. integer arithmetic        P5P
less           Supf  Controls optimisations: 'use less memory;'   P5P
subs           Supf  use subs qw(x y); is short for sub x; sub y; P5P
vars           Supf  predeclare variable names                    P5P
lib            Supf  Simple way to add/delete directories in @INC P5P
sigtrap        Supf  For trapping an abort and giving a traceback P5P
diagnostics    Sdpf  For reporting perl diagnostics in full form  TOMC
overload       SdpO  Overload perl operators for new data types   ILYAZ

Perl Language Extensions

Safe           SdcO  Restrict eval'd code to safe subset of ops   MICB
Alias          bdcf  Convenient access to data/code via aliases   GSAR
Plthread       i     Multithreading at Perl level (not O/S level) MICB

The Perl Compiler

B              aucO  The Perl Compiler                            MICB
O              aucO  Perl Compiler frontends                      MICB

Source Code Filters

Filter::Util::
::Exec         bdcf  Interface for creation of coprocess Filters  PMQS
::Call         bdcf  Interface for creation of Perl Filters       PMQS
Filter::
::exec         bdcf  Filters script through an external command   PMQS
::sh           bdcf  Filters script through a shell command       PMQS
::cpp          bdcf  Filters script through C preprocessor        PMQS
::tee          bdcf  Copies to file perl source being compiled    PMQS
::decrypt      bdcf  Template for a perl source decryption filter PMQS

Documentation Tools:

Pod::
::HTML         cdpr  converter to HTML                            KJALB +
::Index        cdpr  index generator                              KJALB +
::Latex        cdpr  converter to LaTeX                           KJALB +
::Man          cdpr  converter to man page                        KJALB +
::Parse        cdpr  Common pod parsing code                      KJALB +
::Pod          cdpr  converter to canonical pod                   KJALB +
::RTF          cdpr  converter to RTF                             KJALB +
::Texinfo      cdpr  converter to texinfo                         KJALB +
::Text         Supf  convert POD data to formatted ASCII text     TOMC

3) Development Support

Name           DSLI  Description                                  Info
-----------    ----  -------------------------------------------- -----
AutoSplit      Supf  Splits modules into files for AutoLoader     P5P
Benchmark      Supf  Easy way to time fragments of perl code      P5P
FindBin        adpf  Locate current script bin directory          GBARR
DoWhatIWant    i     Does what you want without even asking
ExtUtils::
::DynaGlue     i     Utilities/glue code for C<->Perl interfaces  DOUGM !
::MakeMaker    SupO  Writes Makefiles for extensions              MMML
::Manifest     Supf  Utilities for managing MANIFEST files        MMML
::Typemap      i     xsubpp typemap handling                      WPS
::embed        bdpf  Utilities for embedding Perl in C/C++ apps   DOUGM
Test::
::Harness      Supf  Executes perl-style tests                    ANDK
Devel::
::CallerItem   RupO  'caller()' Object wrapper + useful methods   JACKS
::CoreStack    adpf  generate a stack dump from a core file       ADESC
::DProf        Rdcf  Execution profiler                           DMR
::DumpStack    Rupf  Dumping of the current function stack        JACKS
::Peek         adcf  Peek at internal representation of Perl data ILYAZ
::RegExp       adcO  Access perl internal regex functions         ILYAZ
::Symdump      RdpO  Perl symbol table access and dumping         ANDK
::TraceFuncs   adpO  Trace funcs by using object destructions     JOEHIL
Usage          bupr  Type and range checking on subroutine args   JACKS
VCS::
::RCS          idpf  Interface layer over RCS functionality       RJRAY
::RCE          idcf  Perl layer over RCE C API                    RJRAY
Include        adpO  Parse C header files for use in XS           GBARR
Make           adpO  Makefile parsing, and 'make' replacement     NI-S
DataFlow       RdpO  Acquire data based on recipes                ILYAZ

4) Operating System Interfaces

Name           DSLI  Description                                  Info
-----------    ----  -------------------------------------------- -----
POSIX          SupO  An interface to most (all?) of POSIX.1       P5P
Fcntl          Sdcf  Defines fcntl() constants (see File::Lock)   JHI
Ioctl          cdcf  Defines ioctl() constants                    KJALB
Errno          i     Constants from <errno.h> EACCES, ENOENT etc  JHI
Env            Supf  Alias environment variables as perl vars     P5P
Shell          Supf  Run shell commands transparently within perl P5P
BSD::
::HostIdent    i     s/gethostname(), s/gethostid()               JHI
::Resource     Rdcf  getrusage(), s/getrlimit(), s/getpriority()  JHI
Sys::
::Hostname     Supf  Implements a portable hostname function      P5P
::Syslog       Supf  Provides same functionality as BSD syslog    P5P
::AlarmCall    Rupf  Timeout on any sub. Allows nested alarms     JACKS
Quota          adcf  Disk quota system functions, local & remote  TOMZO
Proc::
::times        adpf  By-name interface to process times function  TOMC
::Forkfunc     Rdpf  Simple lwall-style fork wrapper              MUIR
::Simple       adpO  Fork wrapper with objects                    MSCHILLI

Platform Specific Modules

MSDOS::
::SysCalls     adcf  MSDOS interface (interrupts, port I/O)       DMO
SGI::
::SysCalls     cdcf  SGI-specific system calls                    AMOSS
::GL           adcr  SGI's Iris GL library                        AMOSS
::FM           adcr  SGI's Font Management library                AMOSS
VMS::
::SysCalls     i     VMS-specific system calls                    CBAIL
::Filespec     Sdcf  VMS and Unix file name syntax                CBAIL
NeXTStep::
::NetInfo      idcO  NeXTStep's NetInfo (like ONC NIS)            PGUEN
Mac::                Macintosh specific modules
::AppleEvents  bmcO  AppleEvent manager and AEGizmos              MCPL
::Components   bmcO  (QuickTime) Component manager                MCPL +
::Files        bmcO  File manager                                 MCPL
::Gestalt      bmcO  Gestalt manager: Environment enquiries       MCPL +
::Memory       bmcO  Memory manager                               MCPL
::MoreFiles    bmcO  Further file management routines             MCPL +
::OSA          bmcO  Open Scripting Architecture                  MCPL +
::Processes    bmcO  Process manager                              MCPL
::Resources    bmcO  Resource manager                             MCPL
::Types        bmcO  (Un-)Packing of Macintosh specific types     MCPL +
OS2::
::ExtAttr      RdcO  (Tied) access to extended attributes         ILYAZ
::PrfDB        RdcO  (Tied) access to .INI-style databases        ILYAZ
::REXX         RdcO  Access to REXX DLLs and REXX runtime         ILYAZ
::FTP          bncf  Access to ftplib interface                   ILYAZ
::UPM          bncf  User Profile Management                      ILYAZ

5) Networking, Device Control (modems) and InterProcess Communication

Name           DSLI  Description                                  Info
-----------    ----  -------------------------------------------- -----
Socket         Sucf  Defines all socket-related constants         JACKS
Ptty           adcf  Pseudo terminal interface functions          NI-S
Net::
::Cmd          cdpO  For command based protocols (FTP, SMTP etc)  GBARR
::Dnet         cdcO  DECnet-specific socket usage                 SPIDB
::Domain       adpf  Try to determine TCP domain name of system   GBARR
::FTP          adpf  Interface to File Transfer Protocol          GBARR
::Gen          adcO  Generic support for socket usage             SPIDB
::IRC          i     Internet Relay Chat interface                MRG
::Inet         adcO  Internet (IP) socket usage                   SPIDB
::NIS          adcO  Interface to Sun's NIS                       RIK
::NISPlus      adcO  Interface to Sun's NIS+                      RIK
::NNTP         adpO  Client interface to NNTP protocol            GBARR
::Netrc        adpO  Support for .netrc files                     GBARR
::POP3         adpO  Client interface to POP3 protocol            GBARR
::Ping         Supf  Implements TCP/IP ping (currently only echo) PMQS
::SMTP         adpf  Interface to Simple Mail Transfer Protocol   GBARR
::SNPP         cdpO  Client interface to SNPP protocol            GBARR
::SOCKS        i     TCP/IP access through firewalls using SOCKS  WSCOT
::SSLeay       adcf  Secure Socket Layer (Eric Young's version)   ADESC
::TCP          adcO  TCP-specific socket usage                    SPIDB
::Telnet       cdpO  Inheritable Telnet socket object protocol    GBARR
::Time         adpf  Obtain time from remote machines             GBARR
::UDP          cdcO  UDP-specific socket usage                    SPIDB
::hostent      adpf  A by-name interface for hosts functions      TOMC
::netent       adpf  A by-name interface for networks functions   TOMC
::protoent     adpf  A by-name interface for protocols functions  TOMC
::servent      adpf  A by-name interface for services functions   TOMC
IPC::
::Open2        Supf  Open a process for both reading and writing  P5P
::Open3        Supf  Like IPC::Open2 but with error handling      P5P
::Chat2        ?     Out-of-service during refit!                 GBARR
::SysV         adcr  shared memory, semaphores, messages etc      JACKS
::Mmap         i     Interface to Unix's mmap() shared memory     MICB
::Globalspace  cdpO  Multi-process shared hash and shared events  JACKS
RPC::                Remote Procedure Calls (see also DCE::RPC)
::ONC          i     Open Network Computing (Sun) RPC interface   PKUTS
DCE::                Distributed Computing Environment (OSF)
::Registry     cdcf  DCE registry functions                       DOUGM
::rgybase      bdcO  Constants from rgybase.h,rgynbase.h          DOUGM +
::Login        bdcO  Interface to login functions                 DOUGM +
::login_base   bdcO  Constants from sec_login.h,sec_login_base.h  DOUGM +
::Status       bdpr  Tie to *sts.h files                          DOUGM +
::UUID         bdcf  Misc uuid functions                          DOUGM +
::ACL          cdcO  Interface to Access Control List protocol    DOUGM +
::aclbase      cdcO  Constants from aclbase.h                     DOUGM +
::RPC          c     Remote Procedure Calls                       DOUGM +
Proxy          i     Transport-independent remote processing      MICB
Proxy::
::Tk           ?     Tk transport class for Proxy (part of Tk)    MICB
ToolTalk       adcr  Interface to the ToolTalk messaging service  MARCP
SNMP           RdcO  Interface to CMU's SNMPv2 libsnmp.a          GSM
Parallel::
::Pvm          bdcf  Interface to the PVM messaging service       EWALKER

6) Data Types and Data Type Utilities (see also Database Interfaces)

Name           DSLI  Description                                  Info
-----------    ----  -------------------------------------------- -----
Math::
::Amoeba       Rdpr  Multidimensional Function Minimisation       JARW
::Approx       adpO  Approximate x,y-values by a function         ULPFR
::BigFloat     SupO  Arbitrary size floating point math package   MARKB
::BigInt       SupO  Arbitrary size integer math package          MARKB
::BigInteger   adc   Arbitrary size integer as XS extension       GARY
::BigRat       ?     Arbitrary size rational numbers (fractions)  MARKB
::Brent        Rdpr  One-dimensional Function Minimisation        JARW
::Complex      SdpO  Complex number data type                     DNAD
::Derivative   Rdpr  1st and 2nd order differentiation of data    JARW
::Fortran      Rdpf  Implements Fortran log10 & sign functions    JARW
::IEEE         i     Interface to ANSI/IEEE Std 754-1985 funcs
::LinearProg   idp   Linear programming utilities                 JONO
::Matrix       adpO  Matrix data type (transpose, multiply etc)   ULPFR
::Pari         adcf  Interface to the powerful PARI library       ILYAZ
::Prime        i     Prime number testing                         GARY
::RandomPrime  i     Generates random primes of x bits            GARY
::Spline       RdpO  Cubic Spline Interpolation of data           JARW
::Trig         bdpf  tan asin acos sinh cosh tanh sech cosech     JARW
::TrulyRandom  i     based on interrupt timing discrepancies      GARY
::VecStat      Rdpr  Some basic numeric stats on vectors          JARW
::ematica      adcO  Interface to the powerful Mathematica system ULPFR
Statistics::
::LTU          RdpO  Implements Linear Threshold Units            TOMFA
::Descriptive  RdpO  Descriptive statistical methods              JKAST
::ChiSquare    Rdpf  Chi Square test - how random is your data?   JONO
Array::
::Vec          idp   Implement array using vec()                  LWALL
::Substr       idp   Implement array using substr()               LWALL
::Virtual      idp   Implement array using a file                 LWALL
::PrintCols    adpf  Print elements in vertically sorted columns  AKSTE
Set::
::Scalar       adpO  Set of scalars (inc references)              JHI
::IntegerFast  adcO  Set of positive integers (in C)              STBEY
::IntSpan      adpO  Set of integers newsrc style '1,5-9,11' etc  SWMCD
Date::
::CTime        adpf  Updated ctime.pl with mods for timezones     GBARR
::DateCalc     Rdcf  Various standards based date calculations    STBEY
::Format       Rdpf  Date formatter ala strftime                  GBARR
::GetDate      adcf  Yacc based free-format date parser in C      TOMC
::Interval     idpO  Lightweight normalised interval data type    TIMB
::Language     adpO  Multi-language date support                  GBARR
::Manip        Rdpf  Manipulate/parse international dates/times   SBECK
::Parse        Rdpf  ASCII Date parser using regexp's             GBARR
::Time         idpO  Lightweight normalised datetime data type    TIMB
Time::
::gmtime       adpf  A by-name interface for gmtime               TOMC
::localtime    adpf  A by-name interface for localtime            TOMC
::Local        Supf  Implements timelocal() and timegm()          P5P
::HiRes        i     High resolution timers and time-of-day       JHI
::CTime        Rdpf  Format Times ala ctime(3) with many formats  MUIR
::ParseDate    Rdpf  Parses many forms of dates and times         MUIR
::JulianDay    Rdpf  Converts y/m/d into seconds                  MUIR
::Timezone     Rdpf  Figures out timezone offsets                 MUIR
::DaysInMonth  Rdpf  Returns the number of days in a month        MUIR
::Zone         Rdpf  Timezone info and translation routines       GBARR
Tie::
::Hash         Supr  Base class for implementing tied hashes      P5P
::Scalar       Supr  Base class for implementing tied scalars     P5P
::Array        c     Base class for implementing tied arrays      CHIPS
::Cache        adpO  In memory size limited LRU cache             MIKEH
::Dir          adpr  Tie hash for reading directories             GBARR
::File         adpr  Tie hash to files in a directory             AMW
::IxHash       RdpO  Indexed hash (ordered array/hash composite)  GSAR
::Mem          adcO  Bind perl variables to memory addresses      PMQS
::Quick        i     Simple way to create ties                    TIMB
::ShiftSplice  i     Defines shift et al in terms of splice       LWALL
::SubstrHash   SdpO  Very compact hash stored in a string         LWALL
::Watch        bdpO  Uses Tie::Quick to watch a variable          LUSOL
Class::
::Eroot        RdpO  Eternal Root - Object persistence            DMR
::Template     Rdpr  Struct/member template builder               DMR
Object::
::Info         Rupf  General info about objects (is-a, ...)       JACKS
Ref            RdpO  Print, compare, and copy perl structures     MUIR
Sort::
::Versions     Rdpf   sorting of revision (and similar) numbers   KJALB +

Data Type Marshaling (converting to/from strings) and Persistent Storage

FreezeThaw     bdpf  Convert arbitrary objects to/from strings    ILYAZ
Persistent     adpO  Creates persistent hashrefs or arrayrefs     JPC
Storable       adcr  Persistent data structure mechanism          RAM
Marshal::
::Dispatch     cdpO  Convert arbitrary objects to/from strings    MUIR
::Packed       cdpO  Run-length coded version of Marshal module   MUIR
::Eval         cdpO  Undo serialization with eval                 MUIR
Data::
::Dumper       RdpO  Convert data structure into perl code        GSAR

7) Database Interfaces (see also Data Types)

Name           DSLI  Description                                  Info
-----------    ----  -------------------------------------------- -----
DBI            amcO  Generic Database Interface (see DBD modules) DBIML
DBD::
::Oracle       amcO  Oracle Driver for DBI                        TIMB
::Ingres       i     Ingres Driver for DBI                        TIMB
::Informix     adcO  Informix Driver for DBI                      ADESC
::mSQL         amcO  Msql Driver for DBI                          ADESC
::DB2          adcO  DB2 Driver for DBI                           MHM
::Sybase       cdpO  Sybase Driver for DBI (uses Sybase::CTlib)   MEWP
::QBase        amcO  QBase Driver for DBI                         BENLI
Oraperl        ampf  Oraperl emulation interface for DBD::Oracle  TIMB
Ingperl        i     Ingperl emulation interface for DBD::Ingres  TIMB
Sybase::
::DBlib        RdcO  Sybase DBlibrary interface                   MEWP
::Sybperl      Rdpf  sybperl 1.0xx compatibility module           MEWP
::CTlib        bdcO  Sybase CTlibrary interface                   MEWP
Msql           RmcO  Mini-SQL, a light weight SQL database        ANDK
Pg             Rdcf  Postgres95 SQL database interface            MERGL
Datascope      Rdcf  Interface to Datascope RDBMS                 DANMQ
Xbase          bdpf  Read Xbase files with simple IDX indexes     PRATP

Tied Hash File Interfaces:

NDBM_File      Suc   Tie to NDBM files                            P5P
DB_File        Suc   Tie to DB files                              PMQS
GDBM_File      Suc   Tie to GDBM files                            P5P
SDBM_File      Suc   Tie to SDBM files                            P5P
ODBM_File      Suc   Tie to ODBM files                            P5P
AnyDBM_File    Sup   Uses first available *_File module above     P5P
DBZ_File       adc   Tie to dbz files (mainly for news history)   IANPX
MLDBM          bdpO  Transparently store multi-level data in DBM  GSAR
AsciiDB        i     Generic text database parsing                MICB
MARC           i     Interface to MARC format (bibliography)      PEM
NetCDF         bmcr  Interface to netCDF API for scientific data  SEMM
Stanza         i     Text format database used by OSF and IBM     JHI
DTREE          cdcf  Interface to Faircom DTREE multikey ISAM db  JWAT
Fame           adcO  Interface to FAME database and language      TRIAS

8) User Interfaces (Character and Graphical)

Name           DSLI  Description                                  Info
-----------    ----  -------------------------------------------- -----
Term::
::Complete     Supf  Tab word completion using stty raw           WTOMPSON
::ReadKey      Rdcf  Read keystrokes and change terminal modes    KJALB
::Cap          Supf  Basic termcap: Tgetent, Tputs, Tgoto         TSANDERS
::Screen       RdpO  Basic screen + input class (uses Term::Cap)  MRKAE
::Info         adpf  Terminfo interface (currently just Tput)     KJALB
::ReadLine     Sdcf  GNU Readline, history and completion         ILYAZ
::Control      idpf  Basic curses-type screen controls (gotxy)    KJALB
::Gnuplot      adcf  Draw vector graphics on terminals etc        ILYAZ
::Query        Rdpf  Intelligent user prompt/response driver      AKSTE

Major Character User Interface Modules:

Curses         adcO  Character screen handling and windowing      WPS
NCurses        cdcO  Curses using the ncurses package             WPS
Perlmenu       Mdpf  Curses-based menu and template system        SKUNZ
Cdk            RdcO  Collection of Curses widgets                 GLOVER
PV             bmpO  PerlVision curses windowing (OO widgets etc) AGUL

Tk X Windows User Interface Modules:

Tk             bmcO  Object oriented version of Tk v4             TKML
Tkperldb       bmpf  Graphical perl debugger interface            TKML
Tk::
::FileSelector bmpO  A Fileselectorbox for choosing files         TKML

Other Major X Windows User Interface Modules:

Sx             Rdcf  Simple Athena widget interface               FMC
Motif          cdcf  Simple Motif and Xt interface                ERICA
Wcl            i     Interface to the Widget Creation Library     TOMH
Fresco         cd+O  Interface to Fresco (post X11R6 version)     BPETH

9) Interfaces to or Emulations of Other Programming Languages

Name           DSLI  Description                                  Info
-----------    ----  -------------------------------------------- -----
C::
::Scan         RdpO  Heuristic parse of C files                   ILYAZ
Tcl            RdcO  Complete access to Tcl                       MICB
::Tk           RdcO  Complete access to Tk *via Tcl*              MICB
Language::
::Prolog       adpO  An implementation of Prolog                  JACKS
SICStus        adcO  Interface to SICStus Prolog Runtime          CBAIL
Fortran::
::NameList     adpf  Interface to FORTRAN NameList data           SGEL

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

Name           DSLI  Description                                  Info
-----------    ----  -------------------------------------------- -----
Cwd            Supf  Current working directory functions          P5P
File::
::Attrib       idpO  Get/set file attributes (stat)               TYEMQ
::Basename     Supf  Return basename of a filename                P5P
::CheckTree    Supf  Check file/dir tree against a specification  P5P
::Copy         adpf  Copying files or filehandles                 ASHER
::CounterFile  RdpO  Persistent counter class                     GAAS
::Find         Supf  Call func for every item in a directory tree P5P
::Flock        adpf  flock() wrapper.  Auto-create locks          MUIR
::Glob         adpf  Filename globing (ksh style)                 TYEMQ
::Listing      bdpf  Parse directory listings                     GAAS
::Lock         adcf  File locking using flock() and lockf()       JHI
::Path         Supf  File path and name utilities                 P5P
::Slurp        bdpf  Read/write/append files quickly              MUIR
::stat         adpf  A by-name interface for the stat function    TOMC
Filesys::
::dfent        adpf  By-name interface                            TOMC
::mntent       adpf  By-name interface                            TOMC
::statfs       adpf  By-name interface                            TOMC

11) String Processing, Language Text Processing, Parsing and Searching

Name           DSLI  Description                                  Info
-----------    ----  -------------------------------------------- -----
String::
::Edit         adpf  Assorted handy string editing functions      TOMC
::Approx       Rdpf  Approximate string matching and substitution JHI
::Scanf        Rdpf  Implementation of C sscanf function          JHI
::Parity       adpf  Parity (odd/even/mark/space) handling        WINKO
::BitCount     adpf  Count number of "1" bits in strings          WINKO
::MatchMany    adpf  Build fast code to match many patterns       TOMC

Language text related modules

Text::
::Abbrev       Supf  Builds hash of all possible abbreviations    P5P
::ParseWords   Supf  Parse strings containing shell-style quoting HALPOM
::Soundex      Supf  Convert a string to a soundex value          MIKESTOK
::TeX          cdpO  TeX typesetting language input parser        ILYAZ
::Bib          RdpO  Parse refer(1)-style bibliography files      ERYQ
::Tabs         Sdpf  Expand and contract tabs ala expand(1)       MUIR
::Wrap         Sdpf  Wraps lines to make simple paragraphs        MUIR
::Template     bdpO  Expand template text with embedded perl      MJD

Stemming algorithms

Text::
::English      adpf  English language stemming                    IANPX
::German       adpf  German language stemming                     ULPFR
::Stem         bdpf  Porter algorithm for stemming English words  IANPX
Search::
::Dict         Supf  Search a dictionary ordered text file        P5P

Other Text:: modules (these should be under String:: but pre-date it)

Text::
::Trie         adpf  Find common heads and tails from strings     ILYAZ
::Parser       adpO  String parser using patterns and states      PATM
SGML::
::Element      cdpO  Build a SGML element structure tree          LSTAF
::SP           cd+O  Interface to James Clark's Sp SGML parser    BARTS
SGMLS          RdpO  A Post-Processor for SGMLS and NSGMLS        DMEGG
Font::
::AFM          RdpO  Parse Adobe Font Metric files                GAAS
Marpa          cd+O  Context Free Parser                          JKEGL
Anagram        adcf  Anangram generator                           ASHER

12) Option, Argument, Parameter and Configuration File Processing

Name           DSLI  Description                                  Info
-----------    ----  -------------------------------------------- -----
Getopt::
::Std          Supf  Implements basic getopt and getopts          P5P
::Long         Supf  Advanced option handling                     JV
::Gnu          adcf  GNU form of long option handling             WSCOT
::Regex        ad    Option handling using regular expressions    JARW
::Mixed        Rdpf  Supports both long and short options         CJM
::Help         bdpf  Yet another getopt, has help and defaults    IANPX
ConfigReader   cdpO  Read directives from configuration file      AMW
Resources      bdpf  Application defaults management in Perl      FRANCOC

13) Internationalization and Locale

Name           DSLI  Description                                  Info
-----------    ----  -------------------------------------------- -----
I18N::
::Collate      Sdpr  Locale based comparisons                     JHI
::WideMulti    i     Wide and multibyte character string          JHI
Locale::
::gettext      Rdcf  Multilanguage messages                       PVANDRY +

14) Authentication, Security and Encryption (see also Networking)

Name           DSLI  Description                                  Info
-----------    ----  -------------------------------------------- -----
User::
::pwent        adpf  A by-name interface to password database     TOMC
::grent        adpf  A by-name interface to groups database       TOMC
PGP            adpO  Simple interface to PGP subprocess via pipes GEHIC
DES            adcf  DES encryption (libdes)                      EAYNG
Des            adcf  DES encryption (libdes)                      MICB
MD5            RdcO  MD5 message digest algorithm                 NWINT
SHA            adcO  NIST SHA message digest algorithm            UWEH
Kerberos       i     Kerberos IV authentication                   MICB
GSS            i     Generic Security Services API (RFC 1508/9)   MSHLD
Crypt::
::DES          a     DES encryption (libdes)                      GARY
::IDEA         a     ???                                          GARY
::PRSG         a     160 bit LFSR for pseudo random sequences     GARY

15) World Wide Web, HTML, HTTP, CGI, MIME etc (see Text Processing)

Name           DSLI  Description                                  Info
-----------    ----  -------------------------------------------- -----
URI::
::Escape       ampf  General URI escaping/unescaping functions    LWWWP
::URL          RmpO  Uniform Resource Locator objects             LWWWP
CGI::
::Base         RmpO  Complete HTTPD CGI Interface class           CGIP
::BasePlus     RmpO  Extra CGI::Base methods (incl file-upload)   CGIP
::Carp         cmpf  Drop-in Carp replacement for CGI scripts     CGIP
::ErrorWrap    bdpf  Trap warnings and die and convert into HTML  TOMC
::Imagemap     adpO  Imagemap handling for specialized apps       MIKEH
::MiniSvr      RmpO  Fork CGI app as a per-session mini server    CGIP
::Out          adpf  Buffer CGI output and report errors          MUIR
::Request      RmpO  Parse CGI request and handle form fields     CGIP
::Response     ampO  Response construction for CGI applications   CGIP
::Session      cmpO  Maintain session/state information           MGH
CGI_Lite       ampO  Light-weight interface for fast apps         SHGUN
HTML::
::QuickCheck   cdpf  Fast simple validation of HMTL text          YLU
::Base         adpO  Object-oriented way to build pages of HTML   GAND
::Simple       bdpf  Simple functions for generating HTML         TOMC
::Element      ampO  Representation of a HTML parsing tree        LWWWP
::Entities     bmpf  Encode/decode HTML entities                  LWWWP
::Formatter    ampO  Convert HTML to plain text or Postscript     LWWWP
::Parse        ampO  Parse HTML documents                         LWWWP
HTTP::
::Date         bmpf  Date conversion for HTTP date formats        LWWWP
::Headers      bmpO  Class encapsulating HTTP Message headers     LWWWP
::Message      bmpO  Base class for Request/Response              LWWWP
::Request      bmpO  Class encapsulating HTTP Requests            LWWWP
::Response     bmpO  Class encapsulating HTTP Responses           LWWWP
::Status       bmpf  HTTP Status code processing                  LWWWP
::Negotiate    bmpf  HTTP content negotiation                     LWWWP
HTTPD::
::UserAdmin    bdpO  Management of server user databases          DOUGM
::GroupAdmin   bdpO  Management of server group databases         DOUGM
::Authen       bdpO  Preform HTTP Basic and Digest Authentication DOUGM
::Config       cdpO  Management of server configuration files     DOUGM
::Access       cdpO  Management of server access control files    DOUGM
WWW::
::RobotRules   ampO  Parse /robots.txt file                       LWWWP
LWP::                Libwww-perl-5
::MediaTypes   bmpf  Media types and mailcap processing           LWWWP
::Simple       bmpf  Simple procedural interface to libwww-perl   LWWWP
::UserAgent    bmpO  A WWW UserAgent class                        LWWWP
::RobotUA      bmpO  A UserAgent for robot applications           LWWWP
::Protocol::*        LWP support for URL schemes (http, file etc) LWWWP
MIME::
::Base64       Rdpf  Encode/decode Base 64 (RFC 1521)             GAAS
::QuotedPrint  Rdpf  Encode/decode Quoted-Printable               GAAS
::Decoder      adpO  OO interface to existing MIME decoders       ERYQ
::Entity       adpO  An extracted and decoded MIME entity         ERYQ
::Head         adpO  A parsed MIME header                         ERYQ
::Parser       adpO  Parses streams to create MIME entities       ERYQ
Apache         bdcO  Interface to the Apache server API           DOUGM
CCI            i     Common Client Interface for WWW browsers     DOUGM

16) Server and Daemon Utilities

Name           DSLI  Description                                  Info
-----------    ----  -------------------------------------------- -----
EventServer    RupO  Triggers objects on i/o, timers & interrupts JACKS
::Functions    Rupf  Utility functions for initializing servers   JACKS
::*Wrapper     Rupf  Bunch of wrappers for different server types JACKS
::Gettimeofday Rupr  gettimeofday syscall wrapper                 JACKS
::Signal       Rupr  signalhandler for the eventserver            JACKS
Server::Server::
::EventDriven  RupO  See 'EventServer' (compatibility maintained) JACKS
Server::Echo::
::MailPipe     cup   A process which accepts piped mail           JACKS
::TcpDForking  cup   TCP daemon which forks clients               JACKS
::TcpDMplx     cup   TCP daemon which multiplexes clients         JACKS
::TcpISWFork   cup   TCP inetd wait process, forks clients        JACKS
::TcpISWMplx   cup   TCP inetd wait process, multiplexes clients  JACKS
::TcpISNowait  cup   TCP inetd nowait process                     JACKS
::UdpD         cup   UDP daemon                                   JACKS
::UdpIS        cup   UDP inetd process                            JACKS
Server::Inet::
::Functions    cdpf  Utility functions for Inet socket handling   JACKS
::Object       cupO  Basic Inet object                            JACKS
::TcpClientObj cupO  A TCP client (connected) object              JACKS
::TcpMasterObj cupO  A TCP master (listening) object              JACKS
::UdpObj       cupO  A UDP object                                 JACKS
Server::FileQueue::
::Functions    cupf  Functions for handling files and mailboxes   JACKS
::Object       cupO  Basic object                                 JACKS
::DirQueue     cupO  Files queued in a directory                  JACKS
::MboxQueue    cupO  Mail queued in a mail box                    JACKS
Server::Mail::
::Functions    cupf  Functions for handling files and mailboxes   JACKS
::Object       cupO  Basic mail object                            JACKS

17) Archiving, Compression and Conversion

Name           DSLI  Description                                  Info
-----------    ----  -------------------------------------------- -----
Compress::
::Zlib         adcO  Interface to the Info-Zip zlib library       PMQS
Convert::
::UU           bdpf  UUencode and UUdecode                        ANDK

18) Images, Pixmap and Bitmap Manipulation, Drawing and Graphing

Name           DSLI  Description                                  Info
-----------    ----  -------------------------------------------- -----
GD             adcO  GIF editing/painting/manipulation            LDS
OpenGL         adcf  Interface to OpenGL drawing/imaging library  STANM
PDL            cdcf  Perl Data Language - numeric analysis env    KGB
PGPLOT         Rdof  PGPLOT plotting library - scientific graphs  KGB
PixDraw        adcO  Drawing and manipulating true color images   KSB
Graphics::
::Simple       idcO  Simple drawing primitives                    NEERI
::Turtle       idp   Turtle graphics package                      NEERI

19) Mail and Usenet News

Name           DSLI  Description                                  Info
-----------    ----  -------------------------------------------- -----
Mail::
::Address      adpf  Manipulation of electronic mail addresses    GBARR
::Internet     adpO  Functions for RFC822 address manipulations   GBARR
::MIME         adpO  Extends Mail::Internet to understand MIME    GBARR
::Cap          adpO  Parse mailcap files as specified in RFC 1524 GBARR
::Send         adpO  Simple interface for sending mail            GBARR
::Mailer       adpO  Simple mail agent interface (see Mail::Send) GBARR
::Alias        adpO  Reading/Writing/expanding of mail aliases    GBARR
::Util         adpf  Mail utilities (for by some Mail::* modules) GBARR
::MH           adcr  MH mail interface                            MRG
::POP3Client   bdpO  Support for clients of POP3 servers          SDOWD
::Folder       adpO  Base-class for mail folder handling          KJOHNSON
News::
::NNTPClient   bdpO  Support for clients of NNTP servers          RVA
::Newsrc       adpO  Manage .newsrc files                         SWMCD
NNTP::
::Server       i     Support for an NNTP server                   JOEHIL

20) Control Flow Utilities (callbacks and exceptions etc)

Name           DSLI  Description                                  Info
-----------    ----  -------------------------------------------- -----
Religion       adpr  Control where you go when you die()/warn()   KJALB
Callback       RdpO  Define easy to use function callback objects MUIR

21) File Handle, Directory Handle and Input/Output Stream Utilities

Name           DSLI  Description                                  Info
-----------    ----  -------------------------------------------- -----
IO::
::Handle       cdpO  Base class for input/output handles          GBARR
::Pipe         cdpO  Methods for pipe handles                     GBARR
::Socket       cdpO  Methods for socket input/output handles      GBARR
::Seekable     cdpO  Methods for seekable input/output handles    GBARR
::Select       adpO  Object interface to system select call       GBARR
::File         cdpO  Methods for disk file based i/o handles      GBARR
::Pty          cdpO  Methods for pseudo-terminal allocation etc   PEASE
::STREAMS      i cO  Methods for System V style STREAMS control
FileHandle     SupO  File handle objects and methods              P5P
FileCache      Supf  Keep more files open than the system permits P5P
DirHandle      SupO  Directory handle objects and methods         CHIPS
SelectSaver    SupO  Save and restore selected file handle        CHIPS
Selectable     cdpO  Event-driven I/O streams                     MUIR
Log::
::Topics       Rdpf  Control flow of topic based logging messages JARW

22) Microsoft Windows Modules

Name           DSLI  Description                                  Info
-----------    ----  -------------------------------------------- -----
Win32::
::OLE          adcf  Interface to OLE API functions               WIN32
::EventLog     adcf  Interface to Win32 EventLog functions        WIN32
::NetAdmin     adcf  Interface to Win32 NetAdmin functions        WIN32
::NetResource  adcf  Interface to Win32 NetResource functions     WIN32
::WinError     adcf  Interface to Win32 WinError functions        WIN32
::Registry     adcf  Interface to Win32 Registry functions        WIN32
::Process      adcf  Interface to Win32 Process functions         WIN32
::FUtils       bdcf  Implements missing File Utility functions    JOCASA
WinNT          cdcf  Interface to Windows NT specific functions   WIN32
NT             cdcf  Old name for WinNT - being phased out        WIN32
Win95          i     Interface to Windows 95 specific functions   WIN32

23) Miscellaneous Modules

Name           DSLI  Description                                  Info
-----------    ----  -------------------------------------------- -----
Archie         Rdpf  Archie queries via Prospero ARDP protocol    GBOSS
Neural         ad+O  Generic simulation of neural networks        LUKKA
Nexus          cdcO  Interface to Nexus (threads/ipc/processes)   RDO
Pcap           i     An interface for LBL's packet capture lib    AMOSS
Roman          Rdpf  Convert Roman numbers to and from Arabic     OZAWA
SDDF           cd+O  Interface to Pablo Self Defining Data Format FIS
Wais           Rdcf  Interface to the freeWAIS-sf libraries       ULPFR
Bio::
::*            i     Utilities for molecular biology              SEB
Remedy::
::AR           adcO  Interface to Remedy's Action Request API     RIK
ARS            Rd??  Interface to Remedy's Action Request API     JMURPHY
Psion::
::Db           idpO  Handle Psion palmtop computer database files IANPX
Logfile        RdpO  Generic methods to analyze logfiles          ULPFR
Agent          bdpO  Supplies Agentspace methods for perl         JDUNCAN
Business::
::CreditCard   Rdpf  Credit card number check digit test          JONO +
Print::
::Label        i     Format address labels                        JONO +
BarCode::
::UPC          i     Produce PostScript UPC barcodes              JONO +

Part 3 - Big Projects Registry

1) Introduction

This section of the Module List is devoted to listing "Big Projects". I don't want to define Big (or even Project) here. I hope the items below speak for themselves. Almost all are just ideas, though some have been dabbled with.

These are ideas for people with very strong skills and lots of time. Please talk, and listen, to Larry _before_ starting to do any work on projects which relate to the core implementation of Perl.

Ask not when these will be implemented, ask instead how you can help implement them.

2) Items in the Todo File

The Todo supplied with Perl lists over 60 items in categories ranging from "Would be nice to have" to "Vague possibilities".

Contacts: LWALL P5P

3) Multi-threading

This is really two projects. True threads (e.g., POSIX) using multiple independant perl interpreter structures and simple timeslicing of 'tasks' within a single perl interpreter. True threads requires operating system support or an external thread library, simple timeslicing does not (and should be portable to all platforms).

Malcolm Beattie < mbeattie@sable.ox.ac.uk > has done extensive work in this area.

Contacts: LWALL MICB P5P

4) Object Management Group CORBA & IDL

OMG's (Object Management Group) CORBA (Common Object Request Broker Architecture) specification provides the standard interface definition between OMG-compliant objects. IDL (Interface Definition Language) is the base mechanism for object interaction. Perhaps an extended IDL compiler which can write XS code would be a good way forward.

Contacts: ASHER, JACKS, DMR

Also:

Inter-Language Unification system (ILU). Similar to a CORBA ORB, with some omissions and extensions. Supports OMG CORBA IDL.

Contacts: DMR

Also:

5) Expand Tied Array Interface

LEN, PUSH, POP, SHIFT, UNSHIFT and a fallback to SPLICE are needed. Complicated by very widespread use of arrays within perl internals.

Contacts: P5P CHIPS LWALL

6) Tied File Handles

It is a long term goal to allow perl file handles to be tied. This will probably be based on the sfio (Safe Fast IO) library.

Contacts: PMQS TIMB P5P LWALL NI-S GBARR

7) Extend Yacc To Write XS Code

Some version of yacc, like byacc or bison, should be converted to spit out an OO .xs and .pm implementing a parser.

Contacts: NI-S P5P LWALL

Part 4 - Who's Who and What's Where

1) Information / Contact Reference Details (in alphabetical order)

2) Perl Frequently Asked Questions (FAQ) and Other Resources

The FAQ and the Meta-FAQ are available on all CPAN sites in the directory doc/FAQs as well as in these places:

Perl Meta-FAQ

Perl FAQ