Perl News

Chris Nandor

Unless otherwise noted, all modules and documentation mentioned here should be available on CPAN, at You can search the CPAN at

This column's online companion is the Perl News at To join the mailing list and get all the latest Perl news delivered to you, send mail to

If you have any Perl news, including new modules or major module updates, or have any comments or questions about Perl News, please send it to If your new module is not listed below, it might just be that we didn't know about it, so send in your mail.

On Deck

It is official: Perl 5.6 is out and in use around the known universe. There are not a lot of new features for the average user, but there are a ton of enhancements under the hood.

ActiveState has been busy, most notably with its release of ActivePerl 5.6, which is now available not only for Win32/x86 platforms, but for Linux/x86 and Solaris/SPARC as well. Microsoft is bundling ActivePerl 5.6 in its Services for Unix 2.0, too.

As I write this, the Perl Whirl, an Alaskan cruise and mini-Perl conference rolled into one, has set sail; hackers are making ready to converge on Carnegie Mellon University in Pittsburgh for yet another perl conference 19100 in June; and others are registering for the O'Reilly Open Source Software Convention and Perl Conference 4.0 in Monterey, CA in July.

One event that has already taken place this year is the Second German Perl Workshop, held May 8-10, 2000 at Bonn-Rhein-Seig in Sankt Augustin, Germany. About 100 people attended, paying only a nominal fee (as with yapc). Next year's event is scheduled for February 28 to March 2, and all the information about it can be found at

A year-long event in the USA is the U.S. Census, the constitutionally mandated decennial tabulation of the population living in each part of the country. In a note to the Perl advocacy mailing list, Lisa Nyman of the U.S. Census Bureau wrote that "the Census 2000 Internet Form is a great example of a government agency implementing essential (Constitutional even) operations with Perl." Find out more at

In March, Chip Salzenberg, Perl Pumpking for maintenance versions 5.004 and 5.005, started a kinder, gentler mailing list for discussion of Perl, "Perl-Friends is a mailing list about everything Perl. It has only one hard and fast rule: Verbal abuse will not be tolerated."

Along similar lines, a new web site for discussion of Perl news and issues is online: use Perl, at It's built on the Slash engine (from Slashdot) and shares the same news as the Perl News site, but with additional stories about issues and advocacy and whatever else might have some interest to the readers, as well as headlines from other related sites.

Many web sites these days (including the aforementioned Perl News and use Perl sites) distribute RSS (Rich Site Summary) files with the latest headlines, stories, posts, and so on. Now CPAN Search can be added to the list; you can find recent uploads to CPAN at the URL

Damian Conway, the Mad Scientist of Perl and author of the Coy module, along with fellow judges Elaine Ashton and Mark-Jason Dominus, started a Perl Haiku Contest, at, with winners to be announced at the O'Reilly Perl Conference 4.0.

Some new Perl books are being published, as usual. For the Win32 set, published by Wiley, there's Tobias Martinsson's ActivePerl with ASP and ADO, a guide to using PerlScript (the ActiveX scripting engine from ActiveState), focusing on Active Server Pages and ActiveX Data Objects. Wrox Press has Simon Cozens' Beginning Perl, looking to satisfy the needs of novices.

O'Reilly is publishing Perl for System Administration by David N. Blank-Edelman and a second edition of CGI Programming with Perl by Scott Guelich, Shishir Gundavaram, and Gunther Birznieks. O'Reilly has also put its Web Client Programming with Perl, by Clinton Wong, online at

Also coming out from O'Reilly are third editions of Johan Vromans' Perl 5 Pocket Reference and the Camel itself, Programming Perl, by Larry Wall, Tom Christiansen, and Jon Orwant, with new and updated content for Perl 5.6.

In The Bullpen

ActiveState is branching out a bit from Perl these days. The company is working on ports of Perl and Python to the Itanium (IA-64) processor, Intel's next-generation chip. They've also announced Komodo, a cross-platform development environment for Perl and Python built on Mozilla, the open source browser and application framework from Netscape. This will involve creating Perl bindings to the Mozilla API. ActiveState is also working with Sendmail to embed Perl into the Sendmail API.

Since we have Perl everywhere, we need a Perl shell to run it from, right? Greg Purdy's psh might fit our needs here. It is in development; see gregor/psh/ for more information, or the article later in this issue.

Purdy also wrote Lip::Pod, bringing Literate Programming - Donald Knuth's concept that source code and its documentation should be combined in a coherent whole - to Perl. Lip::Pod uses Brad Appleton's Pod::Parser, which is now included with the Perl distribution.

Speaking of Knuth and pod, Tim Jenness has written Pod::LaTeX and pod2latex for converting pod documents into LaTeX. Alan Fry's pod2pdf at turns pod into Adobe's PDF (Portable Document Format).

Mark Summerfield wrote Image::Xbm and Image::Xpm, and a related class, Image::Base, for loading, manipulating, and saving images. Martien Verbruggen's GDtextUtil distribution includes modules for working with text and the GD module.

J. David Lowe penned the fun HTML::Munger for creating HTML filters. It was first written to create the Pootifier, online at HTML::TableExtract by Matt Sisk, unsurprisingly, extracts data from HTML tables.

Benjamin Franz's CGI::Minimal is a lightweight alternative to the CGI module distributed with Perl. HTTP::BrowserDetect, by Lee Semel, does a number of tests on the HTTP_USER_AGENT string to guess which browser a user is using.

Bunches of modules are on CPAN for SAX, the Simple API for XML. Michael Koehne's XML::Handler::YAWriter is Yet Another SAX writer, and his XML::Filter::Hekeln is a SAX filter.

Jochen Wiedmann's XML::EP is a framework for publishing XML documents, based on Cocoon. Matt Sergeant wrote AxKit, the Apache XML Delivery Toolkit, for delivering XML-based content to all kinds of web clients.

As usual, lots of new Apache modules are out. J. David Lowe's Apache::Backhand forms a bridge between mod_perl and mod_backhand, and Geoffrey Young's Apache::DebugInfo provides debugging info on a per-request basis. Young's Apache::RequestNotes passes form and cookie data in pnotes, and his Apache::Wrapper provides a simple framework for creating uniform, template driven content.

Stas Bekman wrote Apache::GTopLimit for limiting the number of Apache processes. Apache::TicketAccess, from Michael Schout, is a module for cookie-based authentication. Lincoln Stein's Apache::MP3 generates browsable directories of MP3 files and playlists for them, and can stream those files. The version of Apache::MP3 on CPAN is substantially different from the one described in Stein's article in TPJ #16; see the documentation for more information.

Stein also released MP3::Napster, for fetching files from the controversial MP3 exchange service (described in TPJ #17), and Bundle::MP3, which includes several MP3-related modules. MPEG::MP3Info, a module providing basic information about an MP3 file, was renamed to MP3::Info. Similarly, Sander van Zoest's MPEG::ID3v1Tag was renamed to MP3::ID3v1Tag.

Mike Blazer wrote Crypt::CBCeasy for easier access to Crypt::CBC. Marc Lehmann's Crypt::Twofish2 is a Crypt::CBC-compliant implementation of the twofish cipher. Ashish Gulhati's Crypt::PGP5 provides access to PGP 5.

The Perl interface to GnuPG (an open source alternative to PGP) was written by Frank J. Tobin, called PGP::GPG::MessageProcessor. Finding that package was "too inextensible to carry on further," Tobin rewrote it as GnuPG::Interface.

Kevin Meltzer's Untaint detects and launders tainted data.

Abigail's Algorithm::Numerical::Shuffle performs a one pass, fair shuffle on a list.

Statistics::Distributions, by Michael Kospach, calculates critical values of common statistical distributions.

Randy Kobes' Math::Cephes is an interface to the cephes math library. John Peacock wrote Math::FixedPrecision for decimal math without floating point errors. Math::Logic from Mark Summerfield provides pure binary, trinary, or multi-value logic.

Graham Barr wrote Convert::ASN1 to encode and decode ASN.1 data structures using BER/DER rules, as a replacement to his Convert::BER module.

Ned Konz wrote Archive::Zip to create, read, write, and manipulate Zip archive files.

Until now, you couldn't easily control those cool little Lego MindStorms with Perl. Enter John C. Quillan and his LEGO::RCX for controlling a MindStorms RCX brick.

Michael Schwern, always coming up with something to make us scratch our heads, wrote Sex, which creates a new package based on the symbols available in two (or more) other packages.

Befunge::Interpreter by Joshua Harding interprets Befunge programs (those literally and figuratively twisted programs demonstrated in Chris Howe's grand-prize-winning Obfuscated Perl Contest entry from TPJ #15).

Ariel Brosh wrote a MUMPS to Perl compiler, called Mumps. Greg London's Hardware::Verilog::Parser uses Parse::RecDescent to parse Verilog code.

Dan Campbell wrote String::RexxParse to provide REXX's template-based text parsing capabilities to Perl.

Barrie Slaymaker's Regexp::Shellish provides shell-like regular expressions. Regex::PreSuf from Jarkko Hietaniemi creates regular expressions to match a given list of words. Marc Lehmann's String::Similarity calculates the similarity of two strings.

Les Howard's Number::Spell spells out numbers. Kim Ryan's Lingua::EN::Fathom provides readability and general measurements of English text, including the Fog and Flesch Kincaid indices. Lingua::Ident, from Michael Piotrowski, attempts to statistically identify what language text is written in.

Ryan also wrote Locale::RegionAbbrev to convert to and from region abbreviations for states, counties, and provinces in the United States, Australia, Canada, and the United Kingdom, and Locale::SubCountry to convert to and from country names and their commonly used postal codes.

LinePrinter is an interface to the lpd printer utility by Chris Fuhrman.

Jamie McCarthy's Tie::CacheHash maintains sorted lists of top entries in a hash. Brent B. Powers wrote Memoize::ExpireLRU to expire least-recently used elements from a Memoize cache.

DeWitt Clinton's File::Cache allows processes to communicate via the filesystem. Sam Tregar's IPC::SharedCache manages a cache in SysV shared memory.

IPC::Session, from Steve Traugott, encapsulates open3() and provides a persistent remote shell session object, suitable for calling ssh. Mmmmm.

Barrie Slaymaker's Eesh is an interface to the Enlightenment Window Manager IPC Library. Dermot Musgrove's Glade-Perl distribution is an interface to Glade, the GTK+ user interface builder.

Ian Robertson's Solaris::ACL provides access to Solaris access control lists for files.

Mail::Audit creates mail filters without having to resort to procmail, thanks to Simon Cozens (and described later in this issue). Adam Spiers wrote Mail::Field::Received to parse Received headers in mail messages.

Net::DLookup does lookups on 410 different two- and three-letter top-level domains. Net::Syslog from Lee Howard sends syslog messages to a remote syslogd.

Hajimu Umemoto's Socket6 brings IPv6 support to Perl.

DBD::RAM, by Jeff Zucker, allows DBI access to Perl data structures, which can be especially useful for prototyping. DBD::RAM is used by a new project by some folks from the DBI mailing list, a SQL server written in Perl called Anubis. It is still early in development; check out PerlDB on SourceForge for more information (

DBIx::KwIndex by Steven Haryanto creates and maintains keyword indices in DBI tables. Jason McIntosh's DBIx::Schema is a module for working with schemas. Simon Matthews' Template::Plugin::DBI is a plugin for the Template module for making DBI calls.

In the world of Windows, Mike Blazer wrote Win32::DriveInfo to get information about a disk drive and Win32::RASE for managing dialup entries and network connections, implementing the client API for Win32 RAS. Win32::EventLog::Carp by Robert Rothenberg adds messages to the Win32 event log. John McNamara's Spreadsheet::WriteExcel creates minimal Excel binary files.

Andrew Arensburger's p5-Palm distribution includes bunches of modules for reading, manipulating, and writing Palm .pdb and .prc database files.

_ _END_ _

Chris Nandor ( sees no reason whatsoever to put nuts in chocolate fudge. They just take up room where you could put more chocolate fudge.