You can search current information on all modules at kobesearch.cpan.org and search.cpan.org.
The CPAN ("Comprehensive Perl Archive Network") global file archive that underlies these services can be directly accessed at www.cpan.org. The CPAN FAQ is particularly worth reading to gain an understanding of what CPAN is, and isn't, how it works and how it relates to the services built over it.
For background information about why this document is currently not being maintained see this message and this one.
Perl 5 Modules typically conform to certain guidelines which make them easier to use, reuse, integrate and extend.
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.
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.
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 your 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. Send the new or corrected entry by email to modules@perl.org . Please do not send code to this address. Instead upload your module, once registered, to the PAUSE site for forwarding on to CPAN. See section 2, especially 2.6 and 2.11.
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://www.cpan.org/modules/04pause.html 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.
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.
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.
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! If it's vital then you can use the UNIVERSAL methods isa and can. 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 or the SelfLoader module 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.
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() variablesFunction 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 callIt can be very helpful if the names of the classes that your module uses can be specified as parameters. Consider:
$dog_class = $args{dog_class} || 'Dog'; $spot = $dog_class->new(...);This allows the user of your module to specify an alternative class (typically a subclass of the one you would normally have used).
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.
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.
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.modules or modules@perl.org .
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.
Since the CPAN is huge and growing daily, it's essential that module authors choose names which lend themselves to browsing. That means minimizing acronyms, cute names, and jargon. Also, don't make up a new top level category unless you have a good reason; please choose an already-existing category when possible. Send mail to modules@perl.org before you upload, so we can help you select a name.
If you insist on a name that we consider inappropriate, we won't prevent you from uploading your module -- but it'll remain in your "author" directory and won't be directly visible from CPAN/modules/by-module.
We appreciate the efforts of the contributors who have helped make the CPAN the world's largest reusable code repository. Please help us enhance it by working with us to choose the best name possible.
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.
If developing modules for private internal or project specific use, that will never be released to the public, then you should ensure that their names will not clash with any future public module. You can do this either by using the reserved Local::* category or by using an underscore in the top level name like Foo_Corp::*.
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.
The best way to know for sure, and pick up many helpful suggestions, is to ask someone who knows. The comp.lang.perl.modules Usenet newsgroup is read by just about all the people who develop modules and it's generally the best place to ask first. If you need more help then try modules@perl.org .
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!
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.
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) 1997 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.
Don't use a "1.3.2" style version directly. If you use RCS or a similar system which supports multilevel versions/branches you can use this (but put it all on one line for MakeMaker VERSION_FROM):
$VERSION = do { my @r=(q$Revision: 3.112 $=~/\d+/g); sprintf "%d."."%03d"x$#r,@r };
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.gz). See perldoc ExtUtils::MakeMaker.pm for details.
It's good idea to post an announcement of the availability of your module to the comp.lang.perl.announce Usenet newsgroup. This will at least ensure very wide once-off distribution.
If not using PAUSE 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://www.cpan.org/modules/04pause.html
or upload to:
ftp://pause.kbx.de/incoming
and notify upload@pause.kbx.de .
By using the PAUSE 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 us an updated entry for the Module list!
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:
It is an important part of the namespace concept that the module list maintainers do not guarantee to you that somebody else won't use the, say, Foo::Bar namespace. The upload area is not censored except for abuse. People are free to upload any modules they like. Instead, there are several levels of protection for your namespaces:
a) The most important is the module list which actually lists and proclaims your namespace.
b) The second is the indexing mechanism of the CPAN. Modules are indexed on a first-come-first-serve basis. The module namespace that is uploaded for the first time ever gets indexed, but not the module of the second one who tries to use the same namespace.
c) As the whole process is trying to benefit the community, all parties are subject to a wider monitoring within the community. This is sometimes referred to as security by visibility.
d) So the next level of namespace protection is the common sense. Your own common sense. Help to save the world. If you get the impression that something goes wrong with regard to namespaces, please write to modules@perl.org and let them know.
e) The perhaps most interesting namespace protection is provided by the perl symbol table itself. A namespace Foo:: is just a package name and its relationship to a namespace Foo::Bar:: is not predetermined whatsoever. The two namespaces can be closely or loosely related or not related at all, but what's most important, they can be writen by different authors who may work rather independently from each other. So if you have registered any namespace, it does not mean that you own the whole namespace tree that starts there. If you are registered as the contact for Foo::Bar, you are not necessarily also associated with Foo::Bar::Baz.
f) In a few rare cases the module list people restrict indexing of certain categories. For example: DBI::* under the control of Tim Bunce Sun::* under the control of Sun Microsystems
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.modules. Please do *not* ask us directly, we simply don't have the time. Sorry.
Name DSLIP Description Info ------------- ----- -------------------------------------------- ----- Fcntl Sdcfp Defines fcntl() constants (see File::Lock) JHI
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.modules.
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.
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!
Name DSLIP Description Info ------------ ----- -------------------------------------------- ---- CORE Sucf? Internal package for perl native functions P5P UNIVERSAL SucOp Internal universal base-class P5P 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 SupO? Automatic function loader (using __DATA__) P5P 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 Supf? Disable named opcodes when compiling code P5P Taint bdpf? Utilities related to tainting PHOENIX
constant Supf? Define compile-time constants P5P diagnostics Sdpf? For reporting perl diagnostics in full form TOMC enum cdpf? resemble enumerated types in C ZENIN integer Supf? Controls float vs. integer arithmetic P5P less Supf? Controls optimisations (yet unimplemented) P5P lib Supf? Simple way to add/delete directories in @INC P5P namespace Rdpnp Perl pragma to use like C++ namespace alias AMICHAUER overload SdpO? Overload perl operators for new data types ILYAZ sigtrap Supf? For trapping an abort and giving a traceback P5P strict Supf? Controls averments (similar to pragmas) P5P subs Supf? use subs qw(x y); is short for sub x; sub y; P5P vars Supf? predeclare variable names P5P
ex:: ::implements RdpO? Study in Polymorphism PDCAWLEY ::interface RdpO? Another study in polymorphism PDCAWLEY ::override Rdpf? perl pragma to override core functions CTWETEN ::caution bdpn? Same as use warnings; use strict; YVES
ex::constant:: ::vars Rdph? Perl pragma to create readonly variables CTWETEN
Alias bdcf? Convenient access to data/code via aliases GSAR
End RdpO? Generalized END {}. ABIGAIL
Error adpOp Error/exception handling in an OO-ish way UARUN
NEXT RdpO? Perl5 implementation of NEXT (RFC190) DCONWAY
Perl adcO? Create Perl interpreters from within Perl GSAR
Protect bdpf? declare subs private or member JDUNCAN
Safe SdcO? Restrict eval'd code to safe subset of ops MICB
Softref bdcf? Extension for weak/soft referenced SVs ILYAZ Attribute:: ::Handlers RdpO? Simpler definition of attribute handlers ABERGMAN ::Types RdpO? Attributes that confer type on variables DCONWAY ::Memoize RdpOp Attribute interface to Memoize.pm MARCEL ::TieClasses RdpOp attribute wrappers for CPAN Tie classes MARCEL ::Abstract RdpOp implement abstract methods with attributes MARCEL ::Overload RdpOp Attribute that makes overloading easier MARCEL ::Deprecated RdpOp Mark deprecated methods KASEI ::Signature bdphp Signatures on methods and subroutines JDUNCAN
Exporter:: ::Import Rdpn? Alternate symbol exporter GARROW ::Options adpO? Extends Exporter to handle use-line options YSTH ::PkgAlias adpf? Load a module into multiple namespaces JDPORTER
Inline bdp?p Write Perl subroutines in other languages INGY Inline:: ::CPR adpn? C Perl Run - Embed Perl in C, ala Inline INGY ::C bdpnp Write Perl subroutines in C INGY ::CPP bdpO? Easy implementation of C++ extensions NEILW ::Python adcO? Easy implementation of Python extensions NEILW ::Tcl adcf? Write Perl subroutines in Tcl RRS ::Java amhpp Easy implementation of Java extensions PATL ::ASM adpO? Write Perl subroutines in Assembler NEILW ::Struct adpO? Bind C structures directly to Perl. NEILW ::Files RdpO? Multiple virtual files after __END__ DCONWAY ::Guile amhhp Inline module for Guile Scheme interpreter SAMTREGAR
Regexp:: ::Common RdpO? Provide commonly requested regular expr. ABIGAIL ::Shellish RdpO? Shell-like regular expressions RBS ::Func adpf? Replace =~, !~, m//, s/// with functions NWIGER
Safe:: ::Hole bdcO? Exec subs in the original package from Safe SEYN
Symbol:: ::Table RdpO? OO interface to package symbols GARROW
Symbol::Approx:: ::Sub Rmphp Call subroutines using approximate names DAVECROSS
B aucO? The Perl Compiler MICB O aucO? Perl Compiler frontends MICB
B:: ::Fathom bdpO? Estimate the readability of Perl code KSTAR ::Graph bdpr? Perl Compiler backend to diagram OP trees SMCCAM ::LexInfo bdcO? Show info about subroutine lexical variables DOUGM ::Size bdcO? Measure size of Perl OPs and SVs DOUGM ::TerseSize bdpO? Info about ops and their (estimated) size DOUGM
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 ::Simple RdpO? Simplified source filtering DCONWAY ::constant idpnp constant mod working like real Pre Processor MZSANFORD ::Trigraph bdpnp Understand ANSI C trigraphs in Perl source. KASEI
PerlIO Rucnp On demand loader for PerlIO layers P5P
PerlIO:: ::gzip RdcO? provide a PerlIO layer to gzip/gunzip NWCLARK
Thread cuhO? Manipulate threads in Perl (EXPERIMENTAL) P5P
Thread:: ::Group bdph? Wait()-like and grouping functions DSUGAL ::Pool bdpOp Worker pools to run Perl code asynchronously ELIZABETH ::Queue cuph? Thread-safe queues P5P ::Semaphore cuph? Thread-safe semaphores P5P ::Signal cuhh? A thread which runs signal handlers reliably P5P ::Specific cuhh? Thread-specific keys P5P ::RWLock RdpOp rwlock implementation for perl threads AFERBER ::IO i ? IO routines DSUGAL ::Object i ? OO routines DSUGAL
Module:: ::Reload Rdpf? Reloads files in %INC based on timestamps JPRIT ::InstalledVersion bdpOp Find version number of installed module SKUD ::Use bdpnp Tracks modules loaded by a script JSMITH ::Signature cdpfp Module signature file manipulation AUTRIJUS
Pod:: ::Diff cdpf? compare two POD files and report diff IANC ::DocBook adpO? convert POD to and from DocBook MBERENDS ::HTML cdpr? converter to HTML KJALB ::HTML2Pod RdpOp Translate HTML into POD SBURKE ::Hlp RdpO? Convert POD to formatted VMS Help text PVHP ::Index cdpr? index generator KJALB ::LaTeX bdpOp Converts pod to latex with Pod::Parser TJENNESS ::Latex cdpr? converter to LaTeX KJALB ::Lyx adpO? A pod to LyX format conversion class RICHARDJ ::MIF adpO? converter to FrameMaker MIF JNH ::Man cdpr? converter to man page KJALB ::PP adpOa A Pod pre-processor RAM ::Parser bdpO? Base class for parsing pod syntax BRADAPP ::Pdf bdpf? Converter to PDF AJFRY ::Pod cdpr? converter to canonical pod KJALB ::RTF cdpr? converter to RTF KJALB ::Rtf RdpO? Converter from POD to Rich Text Format PVHP ::Sdf cdpf? converter to SDF IANC ::Select bdpf? Print only selected sections of pod docs BRADAPP ::Simplify cdpr? Common pod parsing code KJALB ::Texinfo cdpr? converter to texinfo KJALB ::Text Supf? convert POD data to formatted ASCII text TOMC ::Usage bdpf? Print Usage messages based on your own pod BRADAPP ::XML RdpO? Generate XML from POD MSERGEANT ::Tree RdpOp Create a static syntax tree for a POD SWMCD ::Checker RdpO? Check pod documents for syntax errors BRADAPP ::POM RdpOp Pod Object Model ABW
Perl6:: ::Variables RdpO? Perl 6 variable syntax for Perl 5 DCONWAY ::Interpolators bdpnp Use Perl 6 function-interpolation syntax BRENTDAX ::Parameters bdpnp Use Perl 6-style named parameters BRENTDAX
Concurrent adpOp Concurrent and Remotable Objects in Perl VIPUL
Acme:: ::Buffy Rdphp An encoding scheme for Buffy fans LBROCARD
Acme::Morse:: ::Audible Rdpnp Audio(Morse) Programming with Perl ITRIVIZKI
Name DSLIP Description Info ------------ ----- -------------------------------------------- ---- AutoSplit Supf? Splits modules into files for AutoLoader P5P Bleach RdpO? For really clean programs DCONWAY Continuus adpO? Interface to Continuus Code Management tool HENKE Coy Rdpn? Like Carp - only prettier DCONWAY FindBin adpf? Locate current script bin directory P5P Include adpO? Parse C header files for use in XS GBARR Make adpO? Makefile parsing, and 'make' replacement NI-S Perlbug RdpOp Database driven bug tracking system (mysql) RFOLEY Rcs adcf? Alternate RCS interface (see VCS::RCS) CFRETER Smirch Rdpfa For really dirty programs JNAGRA Usage bnpr? Type and range checking on subroutine args JACKS VCS ampOp Generic interface to Version Control Systems LBROCARD
Benchmark Supf? Easy way to time fragments of perl code P5P Benchmark:: ::Timer RdpO? Perl code benchmarking tool ANDREWHO
ExtUtils:: ::DynaGlue adcr? Methods for generating Perl extension files DOUGM ::MakeMaker SupO? Writes Makefiles for extensions MMML ::Manifest Supf? Utilities for managing MANIFEST files MMML ::Embed Sdpf? Utilities for embedding Perl in C/C++ apps DOUGM ::F77 RdpO? Facilitate use of FORTRAN from Perl/XS code KGB ::configPL adpOp configures .PL files PEASE
Carp:: ::Assert adpf? Stating the obvious to let the computer know MSCHWERN ::CheckArgs Rdpf? Check subroutine argument types GARROW ::Datum adpfa Debugging And Tracing Ultimate Module SQUIRREL
ClearCase idcf? Environment for ClearCase revision control BRADAPP ClearCase::
Conjury:: ::C Rdph? Generic software construction toolset JWOODYATT ::Core Rdph? Generic software construction toolset JWOODYATT ::Stage Rdph? Generic software construction toolset JWOODYATT
Devel:: ::CallerItem RnpO? 'caller()' Object wrapper + useful methods JACKS ::CoreStack adpf? generate a stack dump from a core file ADESC ::Cover adchp Code coverage metrics for Perl PJCJ ::Coverage adpf? Coverage analysis for Perl code RJRAY ::DProf Rdcf? Execution profiler DMR ::DebugAPI bdpf? Interface to the Perl debug environment JHA ::DebugInit bdpf? Create a .gdbinit or similar file JASONS ::DumpStack Rnpf? Dumping of the current function stack JACKS ::Leak Rdcf? Find perl objects that are not reclaimed NI-S ::Modlist Rdpf? Collect module use information RJRAY ::PPPort bdcn? Portability aid for your XS code PMQS ::Peek adcf? Peek at internal representation of Perl data ILYAZ ::RegExp adcO? Access perl internal regex functions ILYAZ ::SearchINC Rdpnp loading Perl modules from development dirs MARCEL ::SmallProf Rdpf? Line-by-line profiler ASHTED ::StackTrace RdpOp Stacktrace object w/ info form caller() DROLSKY ::Symdump RdpO? Perl symbol table access and dumping ANDK ::TraceFuncs adpO? Trace funcs by using object destructions JOEHIL ::TraceLoad Rdpfp Traces the loading of perl source code PVERD ::TraceMethods bdpOp Perl module for tracing module calls CHROMATIC ::Constants bdpfp Resolve Constants back to their names CHROMATIC ::Messenger bdpfp Let Your Code Talk to You KOLIBRIE
Perf:: Performance measurement other than benchmarks ::ARM adcf? Application Response Measurement BBACKER
Sub:: ::Curry Rdpfp Cute module to curry functions DAVIDH ::Quotelike bdppp Allow to define quotelike functions RGARCIA
Test Sdpf? Utilities for writing test scripts SBURKE Test:: ::Cmd RdpO? Portable test infrastructure for commands KNIGHT ::Harness Suphp Executes perl-style tests MSCHWERN ::Unit bmpOp framework for XP style unit testing ASPIERS ::Suite cdpO? Represents a collection of Test::Cases HENKE ::Case cdpO? Represent a single test case HENKE ::Mail bdpOp Test framework for email applications SKUD ::Simple bmpfp Basic utilities for writing tests MSCHWERN ::Exception Rdpfp Functions for testing exception-based code ADIE ::More RdpOp More functions for writing tests MSCHWERN ::Litmus bdpOo Submit test results to the litmus webtool ZLIPTON ::Reporter bdpOp sends test results to cpan-testers@perl.org AFOXSON ::Pod adpOp test POD files for errors and warnings BDFOY ::Manifest bdpfp configure which test files to run BDFOY
VCS:: ::RCS idpf? Interface layer over RCS (See also Rcs) RJRAY ::RCE idcf? Perl layer over RCE C API RJRAY ::StarTeam bdpfp Provides an interface to StarBase's StarTeam JOEPHAYES ::PVCS i ? PVCS Version Manager (intersolv.com) BMIDD
Oak bmpOp Oak Perl Compoment Tree DRUOSO
Debug:: ::FaultAutoBT adhOa Automatic Backtrace Extractor on SIG Faults STAS
Name DSLIP Description Info ------------ ----- -------------------------------------------- ---- Env Supf? Alias environment variables as perl vars P5P Errno cdpf? Constants from errno.h EACCES, ENOENT etc P5P Fcntl Sdcf? Defines fcntl() constants (see File::Lock) JHI Ioctl adcf? ioctl(2) constants JPRIT POSIX SupO? An interface to most (all?) of POSIX.1 P5P Shell Supf? Run shell commands transparently within perl P5P
Async:: ::Group adpO? Deal with simultaneous asynchronous calls DDUMONT ::Process i ? class to run sub-processes DDUMONT
BSD:: ::Ipfwgen bdpf? Generate ipfw(8) filters MUIR ::Resource Rdcf? getrusage(), s/getrlimit(), s/getpriority() JHI ::HostIdent i ? s/gethostname(), s/gethostid() JHI
Env:: ::Path adpO? Advanced operations on path variables DSB ::Modulecmd Rdphg Interface to modulecmd from Perl ISAACSON
Proc:: ::Background RdpO? OS independent background process objects BZAJAC ::ExitStatus Rdpf? Interpret and act on wait() status values ROSCH ::Forkfunc Rdpf? Simple lwall-style fork wrapper MUIR ::ProcessTable bdcO? Unix process table information DURIST ::SafePipe bdpf? popen() and `` without calling the shell ROSCH ::Short adpO? System calls with timeout option JHKIM ::Simple adpO? Fork wrapper with objects MSCHILLI ::Spawn Rdpfp Run external programs GARROW ::SyncExec Rdpf? Spawn processes but report exec() errors ROSCH ::times adpf? By-name interface to process times function TOMC ::Queue Rdpfp limits number of concurrent forked processes SALVA
GTop bdcO? Perl interface to libgtop DOUGM
Schedule:: See also Schedule:: in chapter 23 ::At Rdpf? OS independent interface to the at command JOSERODR ::ByClock RdpOp Return to caller at given seconds/minutes SCHAFFTER ::Cron bdpOp cron-like scheduler for perl subroutines ROLAND ::Load RdpOp Remote system load, processes, scheduling WSNYDER
Quota Rdcfp Disk quota system functions, local & remote TOMZO
Shell:: ::Source bdpOp Run programs and inherit environment changes PJCJ
Sys:: ::AlarmCall Rupf? Timeout on any sub. Allows nested alarms JACKS ::Hostname Supf? Implements a portable hostname function P5P ::Sysconf bdpf? Defines constants for POSIX::sysconf() NI-S ::Syslog Supf? Provides same functionality as BSD syslog P5P ::CPU RdpO? Access CPU info. number, etc on Win and UNIX MZSANFORD ::Lastlog RdcO? Provide a moderately Object Oreiented Interf JSTOWE ::Utmp RdcO? Object(ish) Interface to UTMP files. JSTOWE
Sys::Hostname:: ::Long adpOa Return the hosts fully qualified name SCOTT
Note: The Sys:: namespace is considered harmful as it is giving no
clue about which system. Placing additional modules into this
namespace is discouraged. Be:: ::Attribute Rd+f? Manipulate BeOS BFS MIME file attributes TSPIN ::Query Rd+f? Query a BeOS file system TSPIN
FreeBSD:: ::SysCalls cdcf? FreeBSD-specific system calls GARY
HPUX:: ::Ioscan bdpf? Perl function to handle HPUX ioscan command DDUMONT
Linux:: ::AIO adcfp asynchronous I/O using linux/clone MLEHMANN ::Cpuinfo RdpO? Object Oriented Interface to /proc/cpuinfo JSTOWE ::Fuser RdpO? Determine which processes have a file open JSTOWE ::Svgalib RdcO? Object Oriented Perl interface to svgalib JSTOWE ::Pid Rdpfp Interface to Linux getpp?id functions RGARCIA
Mac:: ::AppleEvents bmcO? AppleEvent manager and AEGizmos MCPL ::AssistantFrames RdpOp Easy creation of assistant dialogs GBAUER ::Components bmcO? (QuickTime) Component manager MCPL ::DtfSQL Rdcf? Perl interface to the dtF/SQL DB engine TWEGNER ::Files bmcO? File manager MCPL ::Gestalt bmcO? Gestalt manager: Environment enquiries MCPL ::Glue RmpOp Control apps with AppleScript terminology CNANDOR ::Macbinary bdpO? Decodes MacBinary files. MIYAGAWA ::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 ::Serial bdpO? Interface to Macintosh serial ports DIVERDI ::Types bmcO? (Un-)Packing of Macintosh specific types MCPL
Mac::AppleEvents:: ::Simple Rmphp Simple access to Mac::AppleEvents CNANDOR
Mac::Apps:: ::Anarchie RdpO? Control Anarchie 2.01+ CNANDOR ::Launch Rdpf? MacPerl module to launch / quit apps CNANDOR ::MacPGP RdpO? Control MacPGP 2.6.3 CNANDOR ::PBar RdpO? Control Progress Bar 1.0.1 CNANDOR
Mac::Comm:: ::OT_PPP RdpO? Control Open Transport PPP / Remote Access CNANDOR
Mac::FileSpec:: ::Unixish Mdpfp Unixish-compatability in filespecs SBURKE
Mac::OSA:: ::Simple Rmphp Simple access to Mac::OSA CNANDOR
MSDOS:: ::Attrib bdcf? Get/set DOS file attributes in OS/2 or Win32 CJM ::Descript bdpO? Manage 4DOS style DESCRIPT.ION files CJM ::SysCalls adcf? MSDOS interface (interrupts, port I/O) DMO
MVS:: ::VBFile bdpf? Read MVS VB (variable-length) files GROMMEL
OS2:: ::ExtAttr RdcO? (Tied) access to extended attributes ILYAZ ::FTP bncf? Access to ftplib interface ILYAZ ::PrfDB RdcO? (Tied) access to .INI-style databases ILYAZ ::REXX RdcO? Access to REXX DLLs and REXX runtime ILYAZ ::UPM bncf? User Profile Management ILYAZ
Riscos i ? Namespace for Risc-OS (Acorn et.al.) RISCOSML
SGI:: ::SysCalls cdcf? SGI-specific system calls AMOSS ::GL adcr? SGI's Iris GL library AMOSS ::FM adcr? SGI's Font Management library AMOSS ::FAM RdcO? Interface to SGI/Irix File Access Monitor JGLICK
Solaris:: ::ACL Rdchp Provides access to ACLs in Solaris IROBERTS ::Kmem idcf? Read values from the running kernel ABURLISON ::Kstat adcO? Access kernel performance statistics ABURLISON ::MIB idcO? Access STREAMS network statistics ABURLISON ::MapDev bdpf? Maps sdNN disk names to cNtNdN disk names ABURLISON ::NDD idcO? Access network device statistics ABURLISON ::Procfs adhh? Access to the Solaris /proc filesystem JNOLAN ::InstallDB bdp?? Searches for Solaris package/system info CHRISJ ::Package bdpO? Access a Solaris package pkginfo file CHRISJ ::Contents bdp?? Access a Solaris contents file CHRISJ
Unix:: ::ConfigFile adpO? Abstract interfaces to Unix config files SSNODGRA ::Processors RdcOp Interface to per-processor information WSNYDER ::Syslog Rdcfa Interface to syslog functions in a C-library MHARNISCH ::UserAdmin Rdpf? Interface to Unix Account Information JZAWODNY ::Login bdph? Customizable Unix login prompt / validation NWIGER
VMS:: ::Device Rdcr? Access info about any device on a VMS system DSUGAL ::Filespec Sdcf? VMS and Unix file name syntax CBAIL ::ICC bdcr? Interface to the ICC facilities in VMS 7.2+ DSUGAL ::Lock RncO? Object interface to $ENQ (VMS lock mgr) BHUGHES ::Misc Rdcr? Miscellaneous VMS utility routines DSUGAL ::Monitor Rdcr? Access VMS system performance info DSUGAL ::Persona Rdcf? Interface to the VMS Persona services DSUGAL ::Priv Rdcf? Access VMS Privileges for processes DSUGAL ::Process Rdcf? Process management on VMS DSUGAL ::Queue bdcf? Manage queues and entries DSUGAL ::System Rdcf? VMS-specific system calls DSUGAL ::User bdcr? Read access to system UAF data DSUGAL ::Mail cdcO? Perl module for accessing callable VMS mail DNORTH ::SysCalls i ? VMS-specific system calls CBAIL
VMS::Fileutils:: ::Root RdpO? Evade VMS's 8 level directory restrictions CLANE ::SafeName Rdpf? Transform filenames to "VMS safe" form CLANE
PDA:: ::Pilot amcO? Interface to pilot-link library KJALB ::PilotDesktop i ? Managing Pilot Desktop databases software JWIEGLEY
Hardware:: ::Simulator adpf? Simulate different pieces of hardware GSLONDON
Device:: ::SerialPort bdpO? POSIX clone of Win32::SerialPort COOK ::SVGA c ? SVGA Graphic card driver SCOTTVR ::ParallelPort adpOa Low Level access to Parallel Port SCOTT
Device::ISDN:: ::OCLM bd??? Perl interface to the 3com OCLM ISDN TA MERLIN
AudioCD bdpO? Extension for controlling Audio CDs SDERLE AudioCD:: ::Mac bdcO? Extension for controlling Audio CDs on MacOS AJFRY
Name DSLIP Description Info ------------ ----- -------------------------------------------- ---- Socket Smcf? Defines socket-related constants GNAT Socket6 adcf? getaddrinfo/getnameinfo support module UMEMOTO Ptty adcf? Pseudo terminal interface functions NI-S
Socket:: ::PassAccessRights adcf? Pass file descriptor via Unix domain socket SAMPO
Net:: ::ACAP adpO? Interface to ACAP Protocol (Internet-Draft) KJOHNSON ::AIM adpO? AOL Instant Messenger TOC protocol ARYEH ::AOLIM RdpO? AOL Instant Messenger OO Interface (TOC) RWAHBY ::Bind adpOp Interface to bind daemon related files BBB ::CDDB cdpr? Interface to the CDDB (CD Database) DSTALDER ::Cmd cdpO? For command based protocols (FTP, SMTP etc) GBARR ::DHCPClient bdpOp Interface to DHCP as a client JWALGENB ::DLookup adpO? Lookup domains on Internic and 2-letter TLDs DJASMINE ::DNS RmpOp Interface to the DNS resolver CREIN ::DNSServer cnpOa Secure and Extensible Name Server BBB ::Daemon adpO? Abstract base class for portable servers JWIED ::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 RdcOp Generic support for socket usage SPIDB ::Gnutella bdpO? Gnutella network (v0.4) interface IWADE ::Goofey RdpO? Communicate with a Goofey server GOSSAMER ::HTTPTunnel adpO? Tunnel through HTTP proxies with CONNECT RWAHBY ::Hesiod bdchp Interface to Hesiod library API PAYERLE ::Hotline RdpO? Interface to the Hotline protocol JSIRACUSA ::ICAP adpO? Interface to ICAP Protocol (Internet-Draft) KJOHNSON ::ICB bdpO? ICB style chat server interface JMV ::ICQ bmpO? Client interface to ICQ messaging JMUHLICH ::ICal ampOp RFC2445 (iCalendar) protocol tools SRL ::IMAP adpO? Interface to IMAP Protocol (RFC2060) KJOHNSON ::IMIP impO? RFC2447 tools for event scheduling SRL ::IRC cdpO? Internet Relay Chat interface JEEK ::ITIP cmpO? RFC2446 tools for scheduling events SRL ::Ident RdpO? Performs ident (rfc1413) lookups JPC ::Inet RdcOp Internet (IP) socket usage SPIDB ::Interface adcO? ifconfig(1) implementation SRZ ::Jabber RdpOl Access to the Jabber protocol REATMON ::LDAP ampOp Interface to LDAP Protocol (RFC1777) PLDAP ::LDAPapi Rdcf? Interface to UMICH and Netscape LDAP C API CDONLEY ::LMTP RdpOp LMTP Protocol - RFC2033 LHOWARD ::MsgLink cdpO? Abstraction of "user" part for message link RAM ::NIS adcO? Interface to Sun's NIS ESM ::NISPlus adcO? Interface to Sun's NIS+ RIK ::NNTP adpO? Client interface to NNTP protocol GBARR ::Netmask RdpO? Understand and manipulate network blocks MUIR ::Netrc adpO? Support for .netrc files GBARR ::PH RdpO? CCSO Nameserver Client class GBARR ::POP3 adpO? Client interface to POP3 protocol GBARR ::Pager RdpO? Send Numeric/AlphaNumeric Pages to any pager ROOTLEVEL ::ParseWhois RmpO? Get+Parse "whois" domain data ABEROHAM ::Patricia RdcO? Patricia Trie perl module for fast IP addres PLONKA ::Pcap adcr? An interface for LBL's packet capture lib PLISTER ::Peep RdpO? Clients for Peep: The Network Auralizer STARKY ::Ping SupOp TCP, UDP, or ICMP ping BBB ::Printer RdpO? Direct to lpd printing CFUHRMAN ::SCP Rdphp Perl extension for secure copy protocol IVAN ::SFTP bdpOp Secure File Transfer Protocol client BTROTT ::SMPP cdpO? Protocol for sending SMS (to GSM or CDMA). SAMPO ::SMS RdpOp Send SMS wireless text-messages. ROOTLEVEL ::SMTP adpf? Interface to Simple Mail Transfer Protocol GBARR ::SNMP MdpOp Object oriented interface to SNMP DTOWN ::SNPP cdpO? Client interface to SNPP protocol DREDD ::SOCKS cdcf? TCP/IP access through firewalls using SOCKS SCOOPER ::SSH Rdphp Perl extension for secure shell IVAN ::SSL RdcO? Glue that enables LWP to access https URIs CHAMAS ::SSLeay bmhf? Secure Socket Layer (based on OpenSSL) SAMPO ::Server bdpOp Extensible (class) oriented internet server RHANDOM ::Syslog RdpOp Forwarded syslog protocol LHOWARD ::TCP RdcOp TCP-specific socket usage SPIDB ::TFTP cdpf? Interface to Trivial File Transfer Protocol GSM ::Telnet RdpO? Interact with TELNET port or other TCP ports JROGERS ::Time adpf? Obtain time from remote machines GBARR ::Traceroute bdpOo Trace routes in IPv4, v6 HAG ::UDP RdcOp UDP-specific socket usage SPIDB ::VNC i???? Interface VNC remote frame buffer protocol BRONG ::Whois RdpO? Get+parse "whois" domain data from InterNIC DHUDES ::XWhois RdpO? Whois Client Interface for Perl5. VIPUL ::Z3950 RmcO? OO interface (ZOOM) to Yaz Z39.50 toolkit MIRK ::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 ::xAP adpO? Interface to IMAP,ACAP,ICAP substrate KJOHNSON ::OSCAR bmpOp AOL Instant Messenger OSCAR protocol MATTHEWG ::CIDR Rdpfp Manipulate netblock lists in CIDR notation MRSAM ::CDDBScan bdpOp String search interface to CDDB datbase DSHULTZ ::FTPServer RdcO? Secure, extensible, configurable FTP server RWMJ ::Traceroute6 adphb Interface to IPv6 traceroute MOHACSI ::QMQP adpOp Interface to Quick Mail Queueing Protocol KOBAYASI ::ICQV5 Rnpfg Module to send and receive ICQ messages. SNEMAROV ::ICQV5CD Rnpfg Crypt/decrypt ICQ protocol V5 packets SNEMAROV ::ICQ2000 inpfg allows send and receive ICQ messages. SNEMAROV ::FreeDB bdhOp OOP interface to the FreeDB database DSHULTZ ::Google bdpOp Simple OOP-ish interface to the Google API ASCOPE
Net::Daemon:: ::SSL RdpO? SSL extension for Net::Daemon MKUL
Net::DHCP:: ::Watch bdpOp A class for monitoring a remote DHCPD server EJDRS
Net::DNS:: ::SEC RdpOd DNSSEC extension to Net::DNS OLAF
Net::IMAP:: ::Simple bdpO? Only implements the basic IMAP features JPAF
Net::Ping:: ::External adpf? Cross-platform interface to "ping" utilities COLINM
Net::SMS:: ::Genie RdpOp Send SMS messages using the Genie gateway AWRIGLEY ::Web adpOp generic module for sending SMS via web AWRIGLEY
Net::SNMP:: ::Interfaces RdpOp Obtain IfTable entries via SNMP JSTOWE
Net::SSH:: ::Perl bdpOp Perl client Interface to SSH BTROTT
Net::Telnet:: ::Cisco RmpOp Automate telnet sessions w/ routers&switches JOSHUA
Net::Whois:: ::RIPE MmpOg class implementing a RIPE whois client PAULG
NetAddr:: ::IP RdpOp Manipulation and operations on IP addresses LUISMUNOZ
NetAddr::IP:: ::Find adpfp Find IP addresses in plain text MIYAGAWA
DNS:: ::ZoneParse RdpOp Parse and manipulate DNS Zone files SIMONFLK
IPC:: ::Cache adpO? Shared-memory object cache DCLINTON ::ChildSafe RdcO? Control child process w/o risk of deadlock DSB ::Globalspace cnpO? Multi-process shared hash and shared events JACKS ::LDT RdpOa Implements a length based IPC protocol JSTENZEL ::Locker RdpOp Shared semaphore locks across a network WSNYDER ::Mmap i ? Interface to Unix's mmap() shared memory MICB ::Open2 Supf? Open a process for both reading and writing P5P ::Open3 Supf? Like IPC::Open2 but with error handling P5P ::Run bdph? Child procs w/ piping, redir and psuedo-ttys RBS ::Session bnpO? remote shell session mgr; wraps open3() STEVEGT ::Shareable bdpr? Tie a variable to shared memory BSUGARS ::SharedCache Rmpr? Manage a cache in SysV IPC shared memory SAMTREGAR ::Signal Rdpf? Translate signal names to/from numbers ROSCH ::SysV Sucr? shared memory, semaphores, messages etc P5P ::XPA adch? Interface to SAO XPA messaging system DJERIUS
Replication::Recall:: ::Client adhfo Recall replication library client interface AGUL ::Server adhfo Recall replication library server interface AGUL ::DBServer adpOp Database replication server using Recall AGUL
RPC:: Remote Procedure Calls (see also DCE::RPC) ::PlServer RdpO? Interface for building Perl Servers JWIED ::PlClient RdpO? Interface for building pServer Clients JWIED ::ONC adcO? ONC RPC interface (works with perlrpcgen) JAKE ::Simple adpO? Simple OO async remote procedure calls DDUMONT
DCE:: Distributed Computing Environment (OSF) ::ACL bdcO? Interface to Access Control List protocol PHENSON ::DFS bdcO? DCE Distributed File System interface PHENSON ::Login bdcO? Interface to login functions PHENSON ::RPC c ? Remote Procedure Calls PHENSON ::Registry bdcO? DCE registry functions PHENSON ::Status bdpr? Make sense of DCE status codes PHENSON ::UUID bdcf? Misc uuid functions PHENSON
NetPacket:: ::ARP adpO? Address Resoluti