Path: usenet.cis.ufl.edu!purdue!news.bu.edu!bloom-beacon.mit.edu!spool.mu.edu!howland.reston.ans.net!tank.news.pipex.net!pipex!dispatch.news.demon.net!demon!mail2news.demon.co.uk!ig.co.uk!news From: Tim Bunce Newsgroups: comp.lang.perl.announce,comp.answers,news.answers Subject: comp.lang.perl The Perl 5 Module List (Reusable Software) Supersedes: Followup-To: comp.lang.perl.announce Date: Fri, 25 Aug 1995 04:00:04 GMT Lines: 1371 Sender: C-News Approved: news-answers-request@MIT.EDU Expires: Fri, 29 Sep 1995 04:00:02 GMT Message-ID: Reply-To: Tim Bunce Keywords: FAQ Perl Module Software Reuse X-NNTP-Posting-Host: ignite.demon.co.uk Posting-Frequency: bi-weekly Organisation: Paul Ingram Group, Software Systems, +44 1 483 424424 Xref: usenet.cis.ufl.edu comp.lang.perl.announce:112 comp.answers:13710 news.answers:51731 Posted-By: auto-faq 3.1.1.2 Archive-name: perl-faq/module-list The Perl 5 Module List Maintained by Tim Bunce ---------------------- $Revision: 2.13 $ Contents $Date: 1995/08/22 06:34:40 $ 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 / Emulations of Other Programming Languages 10) File Names, File Systems, File Locking and File Handles 11) Text Processing, Parsing and Searching 12) Option, Argument, Parameter and Configuration File Processing 13) Internationalization and Locale 14) Security and Encryption 15)! World Wide Web, HTML, HTTP, CGI, MIME 16) Server and Daemon Utilities 17) Archiving and Compression 18) Image, Pixmap and Bitmap Manipulation, Drawing and Graphing 19)! Mail and Usenet News 20) Miscellaneous Modules Part 3 - Big Projects Registry 1) Introduction 2) Perl Compiler 3) Safe Perl 4) Multi-threading 5) Object Management Group Interface Definition Language Part 4 - Who's Who and What's Where 1) Information / Contact Reference Details 2) Perl Frequently Asked Questions (FAQ) Files 3) Perl Archives Key: '+' indicates a new item or section, '!' indicates a changed item or section. ======================================================================= 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 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? There is a Comprehensive Perl FTP Archive (CPAN) being developed. Until that is made available you'll have to search through a number of FTP archive sites. Several major ones are listed at the end of Part 4. If you can't find what you want, or wish to check that what you've found is the latest version, you can contact the person associated with the module. Contact details are given at the start of Part 4. I don't record per-module archive addresses because it would take more time and effort than I can spare. At some point in the future this list will be web-ified and module maintainers will be able to maintain their own entries. 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 me so I can keep this list up-to-date. I 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 Tim.Bunce@ig.co.uk. No tabs please. How To Get a More Recent Copy 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: ftp://rtfm.mit.edu/pub/usenet/news.answers/perl-faq/module-list ftp://ftp.demon.co.uk/pub/perl/db/mod/module-list.txt ftp://ftp.wpi.edu/perl5/Modules/module_list.txt (The rtfm.mit.edu site is automatically updated, try that first) Editorial Information This document is Copyright (c) 1995 by Tim Bunce. 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. 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. ======================================================================= 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) = @_; 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('',) || 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 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.4 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 the module does rather than how it does it. Please use nested module names to informally group or categorise a module. Having 57 modules all called Sort will not make life easy for anyone (though having 23 called Sort::Quick is only marginally better :-). Imagine someone trying to install your module alongside many others. If in any doubt ask for suggestions in comp.lang.perl.misc. If you are developing a suite of related 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.5 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. Comp.lang.perl.misc is read by just about all the people who develop modules and it's 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.6 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: A description of the module/package/extension etc. A copyright notice - see below. Prerequisites - what else you may need to have. How to build it - possible changes to Makefile.PL etc. How to install it. Recent changes in this release, especially incompatibilities Changes / enhancements you plan to make in the future. If the README file seems to be getting too large you may wish to split out some of the sections into separate files: INSTALL, Copying, ToDo etc. 2.7 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) 1995 Your Name. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. This statement should at least appear in the README file. You may also wish to include it in a Copying file and your source files. 2.8 Give the module a version/issue/release number. 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 ExtUtils::MakeMaker.pm for details. It's a good idea to use two digits after the decimal point. 2.9 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. Some FTP Archives for Perl Modules: Upload to: ftp://franz.ww.tu-berlin.de/incoming Notify: Andreas Koenig Upload to: ftp://ftp.cis.ufl.edu/pub/incoming ? Notify: spp@psa.pencom.com (Stephen P Potter) Upload to: ftp://ftp.demon.co.uk/incoming Notify: uploads@demon.net Please remember to send me an updated entry for the Module list! 2.10 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: - Adds the standard Module prologue lines - Converts package specifiers from ' to :: - Converts die(...) to croak(...) - Several other minor changes 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: perl -e 'use Module::Name; method(@ARGV)' ... or perl -mModule::Name ... (in perl5.002?) ======================================================================= 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 I have received. I don't record the version number or release dates of the listed Modules. Nor do I record the locations of these Modules. Consult the contact, try the usual perl archive sites or ask in comp.lang.perl.misc. Please do *not* ask me directly, I 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: D - Development Stage (Note: *NO IMPLIED TIMESCALES*!): i - Idea, listed to gain consensus or as a placeholder c - under construction but pre-alpha (not yet released) a/b - Alpha/Beta testing R - Released M - Mature (no rigorous definition) S - Standard, supplied with Perl 5 S - Support Level: m - Mailing-list d - Developer u - Usenet newsgroup comp.lang.perl.misc n - None known, try comp.lang.perl.misc L - Language Used: p - Perl-only, no compiler needed, should be platform independent c - C and perl, a C compiler will be needed + - C++ and perl, a C++ compiler will be needed o - perl and another language other than C or C++ I - Interface Style f - plain Functions, no references used r - some use of unblessed References or ties O - Object oriented using blessed references and/or inheritance 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 I 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 Suc Internal base class for native functions UNIVERSAL Suc Internal universal base-class DynaLoader Suc Dynamic loader for shared libraries AutoLoader Sup Automatic function loader (using AutoSplit) SelfLoader adp Automatic function loader (using __DATA__) JACKS Exporter Sup Implements default import method for modules Carp Sup Throw exceptions outside current package Config Sup Stores details of perl build configuration English Sup Defines English names for special variables strict Sup Controls averments (similar to pragmas) integer Sup Controls float vs. integer arithmetic less Sup Controls optimisations: 'use less memory;' subs Sup "use subs qw(x y)" is short for "sub x; sub y;" sigtrap Sup For trapping an abort and giving a traceback Perl Language Extensions Safe adcO Restrict eval'd code to safe subset of ops MICB Plthread i Multithreading at Perl level (not O/S level) MICB Source Code Filters (requires Perl5.001m or later): Filter:: ::cpp adcf Filters script through C preprocessor PMQS ::exec adcf Filters script through an external command PMQS ::tee adcf Copies to file perl source being compiled PMQS ::call adcf Filters script through perl function PMQS ::decrypt adcf Template for a perl source decryption filter PMQS Documentation Tools: Pod:: ::Parse adp Common pod parsing code KJALB _______________________________________________________________________ 3) Development Support Name DSLI Description Info ----------- ---- -------------------------------------------- ----- AutoSplit Supf Splits modules into files for AutoLoader Benchmark Supf Easy way to time fragments of perl code AddINC adpf Easy way to manipulate @INC via use GBARR DoWhatIWant i Does what you want without even asking ExtUtils:: ::MakeMaker SupO Writes Makefiles for extensions ::DynaGlue i Utilities/glue code for C<->Perl interfaces ::Peek adcf Interface to internal sv_dump and sv_peek ILYAZ Test:: ::Harness Sup Executes perl-style tests Devel:: ::DProf bdcf Execution profiler (excellent) DMR ::Debug i Function and class debugging support ::DumpStack Rupf Dumping of the current function stack JACKS ::CallerItem RupO 'caller()' Object wrapper + useful methods JACKS ::Usage bupr Type and range checking on subroutine args JACKS ::Symdump bdpf Perl symbol table access and dumping ANDK VCS:: ::RCS idpi Interface layer over RCS functionality RJRAY ::RCE idci Perl layer over RCE C API RJRAY _______________________________________________________________________ 4) Operating System Interfaces Name DSLI Description Info ----------- ---- -------------------------------------------- ----- POSIX SupO An interface to most (all?) of POSIX.1 Fcntl Sdcf Defines fcntl() constants (see File::Lock) JHI Ioctl adcf Defines ioctl() constants KJALB Errno i Constants from EACCES, ENOENT etc JHI BSD:: ::Remote adpf getrusage(), s/getrlimit(), s/getpriority() JHI ::HostIdent adpf s/gethostname(), s/gethostid() JHI Sys:: ::Hostname Supf Implements a portable hostname function ::Domainname adpf Try to determine TCP domain name of system GBARR + ::Syslog Supf Provides same functionality as BSD syslog ::AlarmCall Rupf Timeout on any sub. Allows nested alarms JACKS SYS:: ::dfent adpf By-name interface TOMC ::gmtime adpf By-name interface TOMC ::grent adpf By-name interface TOMC ::hostent adpf By-name interface TOMC ::localtime adpf By-name interface TOMC ::mntent adpf By-name interface TOMC ::netent adpf By-name interface TOMC ::protoent adpf By-name interface TOMC ::pwent adpf By-name interface TOMC ::servent adpf By-name interface TOMC ::stat adpf By-name interface TOMC ::statfs adpf By-name interface TOMC ::times adpf By-name interface TOMC 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 _______________________________________________________________________ 5) Networking, Device Control (modems) and InterProcess Communication Name DSLI Description Info ----------- ---- -------------------------------------------- ----- Socket Sucf Defines all socket-related constants Net:: ::Ping Supf Implements TCP/IP ping (currently only echo) PMQS ::IRC i Internet Relay Chat interface MRG ::FTP idpf Implements File Transfer Protocol interface GSPAF ::Telnet i GBARR ::SOCKS i TCP/IP access through firewalls using SOCKS WSCOT ::NIS adcO Interface to Sun's NIS RIK ::NISPlus adcO Interface to Sun's NIS+ RIK ::SSL adcf Secure Socket Layer interface ADESC Net:: ::Gen adcO Generic support for socket usage SPIDB ::Inet adcO Internet (IP) socket usage SPIDB ::TCP adcO TCP-specific socket usage SPIDB ::UDP cdcO UDP-specific socket usage SPIDB ::FTP adpf Interface to File Transfer Protocol GBARR + ::SMTP adpf Interface to Simple Mail Transfer Protocol GBARR + ::Dnet cdcO DECnet-specific socket usage SPIDB IPC:: ::Open2 Supf ::Open3 Supf ::Chat2 ? Out-of-service during refit! ::SysV adcr shared memory, semaphores, messages etc JACKS ::Mmap adcf Interface to Unix's mmap() shared memory MICB RPC:: ::ONC i Open Network Computing (Sun) RPC interface PKUTS ::DCE i Distributed Computing Environment (OSF) RPCs DCE:: ::Registry cdcf DCE registry functions TLP Chat2 adpf Basic port of chat2.pl (see also IPC::Chat2) GBARR Proxy adpO Transport-independent remote processing MICB Proxy:: ::Tk aucO Tk transport class for Proxy (part of Tk) MICB ToolTalk adcr Interface to the ToolTalk messaging service MARCP Archie adpf Archie queries via Prospero ARDP protocol GBOSS SNMP adcO Interface to CMU's SNMPv2 libsnmp.a GSM ! _______________________________________________________________________ 6) Data Types and Data Type Utilities (see also Database Interfaces) Name DSLI Description Info ----------- ---- -------------------------------------------- ----- Math:: ::BigInt SupO Arbitrary size integer math package MARKB ::BigFloat ? ::BigRat ? ::Complex adpO Complex number data type DNAD ::IEEE i Interface to ANSI/IEEE Std 754-1985 funcs ::Pari adcf Interface to the PARI library ILYAZ Array:: ::Vec idp Implement array using vec() LWALL ::Substr idp Implement array using substr() LWALL ::Virtual idp Implement array using a file LWALL Set:: ::Scalar adpO Implement Set of scalars (inc references) JHI Date:: ::GetDate adcf Yacc based free-format date parser in C TOMC ::GetDate adpf Byacc based free-format date parser in Perl GBARR ::CTime adpf Updated ctime.pl with mods for timezones GBARR ::Time idpO Lightweight normalised datetime data type TIMB ::Interval idpO Lightweight normalised interval data type TIMB Time:: ::Local Supf Implements timelocal() and timegm() ::Time adcf High resolution timers and time-of-day JHI FreezeThaw bdpf Convert arbitrary objects to/from strings ILYAZ Tie:: ::SubstrHash RdpO Very compact hash stored in a string LWALL ::ShiftSplice i Defines shift et al in terms of splice LWALL ::Mem adcO Bind perl variables to memory addresses PMQS ::File adpr Tie hash to files in a directory AMW ::IxHash adpO Indexed hash (array/hash composite) GSAR ::Quick i Simple way to create ties TIMB ::Watch i Uses Tie::Quick to watch a variable TIMB TieHash Sup Base class for implementing tied hashes Class:: ::Behavior adpf General behavior methods for classes JACKS ::Eroot bdpO Eternal Root - Object persistence DMR ::Template bdpr Struct/member template builder DMR Statistics:: ::Descriptive RdpO Descriptive statistical methods JKAST _______________________________________________________________________ 7) Database Interfaces (see also Data Types) Name DSLI Description Info ----------- ---- -------------------------------------------- ----- DBI amcO Generic Database Interface (see DBD modules) DBPRL DBD:: ::Oracle amcO Oracle Driver for DBI TIMB ::Ingres cmcO Ingres Driver for DBI TIMB ::mSQL cmcO Msql Driver for DBI ADESC ::DB2 cdcO DB2 Driver for DBI MHM ::Sybase idcO Sybase Driver for DBI MEWP Oraperl ampf Oraperl emulation interface for DBD::Oracle TIMB Ingperl cmpf Ingperl emulation interface for DBD::Ingres TIMB Sybase:: ::DBlib bdcO Sybase DBlibrary interface MEWP ::Sybperl bdcf sybperl 1.0xx compatibility module MEWP ::CTlib cdcO Sybase CTlibrary intgerface MEWP Msql adcf Mini-SQL, a light weight SQL database ANDK Pg bdcf Postgress database interface MERGL Tied Hash File Interfaces: NDBM_File Suc Tie to NDBM files DB_File Suc Tie to DB files PMQS GDBM_File Suc Tie to GDBM files SDBM_File Suc Tie to SDBM files ODBM_File Suc Tie to ODBM files AnyDBM_File Sup Uses first available *_File module above DBZ_File adc Tie to dbz files (mainly for news history) IANPX AsciiDB adp Generic text database parsing MICB Stanza adp Text format database used by OSF and IBM JHI NetCDF bmcr Interface to netCDF API for scientific data SEMM DTREE cdcf Interface to Faircom DTREE multikey isam db JWAT _______________________________________________________________________ 8) User Interfaces (Character and Graphical) Name DSLI Description Info ----------- ---- -------------------------------------------- ----- Term:: ::Cap Supf Basic termcap: Tgetent, Tputs, Tgoto ::Info adpf Terminfo interface (currently just Tput) KJALB ::Complete Supf Tab word completion using stty raw ::ReadLine adcf GNU Readline, history and completion ILYAZ ::Control idpf Basic curses-type screen controls (gotxy) KJALB ::Read cdcf Terminal reading functions (getkey) KJALB ::Pseudo i Pseudo terminal (pty) functions ::Gnuplot adcf Draw vector graphics on terminals etc ILYAZ Major Character User Interface Modules: Curses adcO Character screen handling and windowing WPS Perlmenu Mdpf Curses-based menu and template system SKUNZ PV bmpO PerlVision curses windowing (OO widgets etc) PVML 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 adc 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 / Emulations of Other Programming Languages Name DSLI Description Info ----------- ---- -------------------------------------------- ----- 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, File Locking and File Handles Name DSLI Description Info ----------- ---- -------------------------------------------- ----- File:: ::Path Supf File path and name utilities ::Basename Supf Return basename of a filename ::CheckTree Supf Check file/dir tree against a specification ::Find Supf Call func for every item in a directory tree ::Lock adcf File locking using flock() and lockf() JHI ::KGlob cdcf Filename globing (ksh style) TYEMQ ::Attrib idpO Get/set file attributes (stat) TYEMQ ::CounterFile Rdp0 Persistent counter class GAAS Cwd Supf Current working directory functions FileHandle SupO File handle manipulation functions _______________________________________________________________________ 11) Text Processing, Parsing and Searching Name DSLI Description Info ----------- ---- -------------------------------------------- ----- Text:: ::Abbrev Supf Builds hash of all possible abbreviations ::ParseWords Supf Parse strings containing shell-style quoting ::Soundex Supf Convert a string to a soundex value ::TeX cdpO TeX typesetting language input parser ILYAZ ::Trie adpf Find common heads and tails from strings ILYAZ ::Stem adpf Porter algorithm for stemming English words IANPX ::Parser adpO Parser using patterns and states PATM String:: ::Edit adpf Assorted handy text editing functions TOMC Search:: ::Dict Supf Search a dictionary ordered text file SGML:: ::Element cdpO Build a SGML element structure tree LSTAF ::SP cd+O Interface to James Clark's Sp SGML parser BARTS SGMLS RdcO 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 ::Long Supf Advanced option handling JV ::Gnu adcf GNU form of long option handling WSCOT ConfigReader cdpO Read directives from configuration file AMW _______________________________________________________________________ 13) Internationalization and Locale Name DSLI Description Info ----------- ---- -------------------------------------------- ----- I18N:: ::Collate bdpr Locale based comparisons JHI ::WideMulti i Wide and multibyte character string JHI _______________________________________________________________________ 14) Security and Encryption Name DSLI Description Info ----------- ---- -------------------------------------------- ----- DES adcf DES encryption (libdes) EAYNG Des adcf DES encryption (libdes) MICB MD5 adcf MD5 message digest algorithm NWINT Kerberos adcf Kerberos IV authentication MICB GSS i Generic Security Services API (RFC 1508/9) MSHLD _______________________________________________________________________ 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 bmpO Complete HTTPD CGI Interface class CGIP ::MiniSvr bmpO Fork CGI app as a per-session mini server CGIP ::Request bmpO Parse CGI request and handle form fields CGIP ::Response cmpO Response construction for CGI applications CGIP ::Imagemap ampO Imagemap handling for specialized apps MGH ::UnixSocket cmcf Runs cgi in background through unix socket AMW HTML:: ::QuickCheck cdpf Fast simple validation of HMTL text YLU ::Base adpO Object-oriented way to build pages of HTML GAND 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 + WWW:: ::RobotRules ampO Parse /robots.txt file LWWWP ! ::Log i Parse Common Log File Format LWP:: Libwww-perl5 ::Base64 bmpf Base 64 encoding/decoding routines LWWWP + ::MediaTypes anpf Media types and mailcap processing LWWWP + ::Simple bnpf Simple procedural interface to libwww-perl LWWWP + ::UserAgent bnpO A WWW UserAgent class LWWWP + ::RobotUA i A UserAgent for robot applications LWWWP + ::Protocol::* LWP support for URL schemes (http, file etc) LWWWP + MIME:: ::Handler i Base class for MIME content handlers ::Object i Base class for MIME decoded objects _______________________________________________________________________ 16) Server and Daemon Utilities Name DSLI Description Info ----------- ---- -------------------------------------------- ----- Server Hierarchy of generic server classes Server::Configs:: ::BasicConfig RupO Configuration template class for servers JACKS Server::Initialize:: ::Functions Rupf Utility functions for initializing servers JACKS ::Daemon Rupr Intializing a daemon server JACKS ::Pipe Rupr Intializing a server being piped to JACKS ::InetdService Rupr Intializing a server started from inetd JACKS Server::Server:: ::EventDriven RupO Triggers objects on i/o, timers & interrupts 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 and Compression Name DSLI Description Info ----------- ---- -------------------------------------------- ----- Zip cdcf Interface to the Info-Zip zlib library PMQS _______________________________________________________________________ 18) Image, Pixmap and Bitmap Manipulation, Drawing and Graphing Name DSLI Description Info ----------- ---- -------------------------------------------- ----- PixDraw adcO Drawing and manipulating true color images KSB GD adcO GIF editing/painting/manipulation LDS PGPLOT Rdof PGPLOT plotting library - scientific graphs KGB _______________________________________________________________________ 19) Mail and Usenet News Name DSLI Description Info ----------- ---- -------------------------------------------- ----- Mail:: ::Address adpf Manipulation of electronic mail addresses GBARR ::RFC822 adpO Functions for RFC822 address manipulations GBARR ::MIME adpO Extends Mail::RFC822 to understand MIME GBARR ::Send adpO Simple interface for sending mail GBARR ::Mailer adpO Simple mail agent interface (see Mail::Send) GBARR + ::Util adpf Mail utilities (for by some Mail::* modules) GBARR + ::SMTP i Protocol support including expn ::MH adcr MH mail interface MRG News:: ::NNTPClient bdpO Support for clients of NNTP servers RVA _______________________________________________________________________ 20) Miscellaneous Modules Name DSLI Description Info ----------- ---- -------------------------------------------- ----- WAIS Rdcf Interface to the freeWAIS-sf libraries ULPFR Pcap i An interface for LBL's packet capture lib AMOSS Nexus cdcO Interface to Nexus (threads/ipc/processes) RDO IXO i IXO alphanumeric pager protocol Roman bdpf Convert Roman numbers to and from Arabic OZAWA Archie Rdp Archie and WWW Gateway via Prospero protocol GBOSS Bio:: ::* i Utilities for molecular biology SEB Remedy:: ::AR cdcO Interface to Remedy's Action Request API RIK OLE:: ::Word_Basic adc OLE extension for NT Perl WYTAN ======================================================================= 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 but ask 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 2) Perl Compiler Part of the design of Perl 5 was to make it possible to write a compiler for it. It's a possible master's thesis topic. Related to this is the ability to save and load a 'flat' byte-code representation of the compiled perl code. It would be translated back into Perl's own internal form for speed. Note that three different prototype Tcl compilers have recently been announced in the comp.lang.tcl group! Anyone interested in this should take a good look at the Java language from Sun http://java.sun.com/. Contacts: LWALL P5P 3) Safe Perl A mechanism to allow unknown/insecure perl code to be compiled and executed in a finely controlled manner. An eventual aim is to enable Perl Objects (data+code) to travel between applications (possibly across networks). Similar to the existing Safe-Tcl (see http://minsky.med.virginia.edu/sdm7g/Projects/Python/safe-tcl/). Contacts: LWALL MICB P5P 4) 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). Contacts: LWALL MICB P5P 5) Object Management Group Interface Definition Language and/or ILU OMG's (Object Management Group) CORBA 1.1 (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. The SunSoft OMG IDL CFE (Compiler Front End) provides a complete framework for building CORBA 1.1-compliant preprocessors for OMG IDL. To use SunSoft OMG IDL CFE, you must write a back-end; full instructions are included. A complete compiler of IDL would translate IDL into client side and server side routines for remote communication in the same manner as the currrent Sun RPCL compiler. Several companies including Sunsoft are building back ends to the CFE which translate IDL into target languages, e.g. Pascal or C++, in the context of planned CORBA-compliant products. Contacts: AJS, JACKS, idl-cfe@sun.com, ftp://omg.org/pub/OMG_IDL/ Also: ftp://parcftp.parc.xerox.com/pub/ilu/ilu.html 7) 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: LWALL P5P 8) 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 P5P LWALL ======================================================================= Part 4 - Who's Who and What's Where =================================== 1) Information / Contact Reference Details (in alphabetical order) Ref Contact Details ----- -------------------------------------------------------------- + ADESC Alligator Descartes + AJS Aaron Sherman AMOSS Amos Shapira AMW Andrew Wilcox ANDK Andreas Koenig ASHER Aaron Sherman BARTS Bart Schuller BBUM Bill Bumgarner BPETH Bill Petheram CBAIL Charles Bailey CGIP The CGI-Perl Developers mailing list DBPRL DBperl mailing list. DMEGG David Megginson DMO Darryl Okahata DMR Dean Roehrich DNAD Dave Nadler EAYNG Eric Young ERICA Eric Arnold FMC Frederic Chauveau GAAS Gisle Aas GAND Greg Anderson GBOSS Greg Bossert GBARR Graham Barr GSAR Gurusamy Sarathy + GSM Joe Marzot GSPAF Gene Spafford IANPX Ian Phillipps ILYAZ Ilya Zakharevich JACKS Jack Shirazi ftp://ftp.icnet.uk/icrf-public/biu/perlmods/JACKS.html JHI Jarkko Hietaniemi JKAST Jason Kastner + JKEGL Jeffrey Kegler JV Johan Vromans JWAT John Watson KGB Karl Glazebrook KJALB Kenneth Albanowski KSB Simon Berg LDS Lincoln D. Stein LSTAF Lennart Staflin LWALL Larry Wall. Author of Perl. Busy man. LWWWP libwww-perl mailing list MARKB Mark Biggar MARCP Marc Paquette MEWP Michael Peppler MERGL Edmund Mergl ! MGH Marc Hedlund MHM Mike Moran MICB Malcolm Beattie MRG Matthew Green + MSHLD Michael Shields NI-S Nick Ing-Simmons NWINT Neil Winton OZAWA OZAWA Sakuro PATM Pat Martin PKUTS Peter Kutschera PMQS Paul Marquess P5P The Perl5 Porters Mailing List PGUEN Philip Guenther PVML Perl Vision Mailing List RDO Robert Olson RIK Rik Harris RJRAY Randy J Ray RVA Rodger Anderson SEB Steven Brenner SEMM Steve Emmerson SGEL Sergio Gelato SKUNZ Steven L. Kunz SPIDB Spider Boardman TKML Tk Mailing list TLP Travis L Priest TOMC Tom Christiansen TOMH Tom Horsley TIMB Tim Bunce TYEMQ Tye McQueen UCLP Usenet: comp.lang.perl.misc, always a good place to enquire ULPFR Ulrich Pfeifer WPS William Setzer WSCOT Wayne Scott WYTAN Wei-Yuen Tan YLU Luke Y. Lu 2) Perl Frequently Asked Questions (FAQ) Files Perl Meta-FAQ on the World Wide Web (WWW) http://www.khoros.unm.edu/staff/neilb/perl/metaFAQ http://www.cse.unsw.edu.au/perl/metaFAQ.html http://web.nexor.co.uk/perl/Meta-FAQ.txt Perl FAQ ftp://rtfm.mit.edu/pub/usenet/news.answers/perl-faq/ ftp://ftp.uu.net/usenet/news.answers/perl-faq/ ftp://ftp.cis.ufl.edu/pub/perl/doc/FAQ ftp://ftp.khoros.unm.edu/pub/perl/faq.gz ftp://ftp.cs.ruu.nl/pub/NEWS.ANSWERS/perl-faq/ ftp://ftp.funet.fi/pub/languages/perl/doc/faq ftp://src.doc.ic.ac.uk/packages/perl/FAQ 3) Some Perl Archives ftp://ftp.cdrom.com/pub/perl # mirrors many other perl archives ftp://coombs.anu.edu.au/pub/perl ftp://ftp.cbi.tamucc.edu/pub/duff/Perl ftp://ftp.cis.ufl.edu/pub/perl ftp://ftp.cs.ruu.nl/pub/PERL ftp://ftp.demon.co.uk/pub/perl ftp://ftp.funet.fi/pub/languages/perl ftp://ftp.khoros.unm.edu/pub/perl ftp://ftp.metronet.com/pub/perl ftp://ftp.uu.net/languages/perl ftp://ftp.wpi.edu/perl5 ftp://ftp.zrz.tu-berlin.de/pub/unix/perl ftp://perl.com/pub/perl ftp://src.doc.ic.ac.uk/packages/perl ftp://src.doc.ic.ac.uk/packages/perl5 ftp://sungear.mame.mu.oz.au/pub/perl End. .