Perl News

Jon Orwant

Perl 5.004 is available at a CPAN site near you. I'll go out on a limb and predict that it will be one of the stablest releases of Perl yet, thanks to the tireless efforts of Chip Salzenberg. Many people have asked me to itemize how 5.004 differs from 5.003; I refer them to the 1092 entries in the 350K Changes file.

Looking ahead to Perl 5.005: Malcolm Beattie is in charge of the development track, and Tim Bunce is in charge of the maintenance track. Patches will probably be released intermittently over the coming months, and eventually 5.005 will be announced, perhaps in a year. What new features will it have? No one knows for sure, but out of the list below, I'd be very surprised if the first four didn't make it. The rest are all planned - but remember that the Perl developers are all volunteers with day jobs.

The O'Reilly & Associates Perl Conference will be held August 19-21 at the Fairmont Hotel in San Jose, California. For details, see or the back of this magazine.

Apache/Perl answers the question of how to run Perl CGI programs as quickly as possible: instead of spawning a separate process, Apache embeds the Perl interpreter inside the server. See the Apache/Perl module list at

Felix Gallo's One Penguin, now known as Penguin 3.0, is available. It lets your Perl programs send, receive, and safely execute PGP-signed Perl code over the Internet.

The GetWeb system, by Rolf Nelson, lets you access Web pages via e-mail.

Neil Bowers' WWW::Robot module provides a traversal engine for web robots. You describe what you want to happen when each page is visited, and it takes care of the rest.

The Set::IntSpan module, by Steven McDougall, manages sets of integers and is optimized for ranges of integers, e.g. 1-817,831-992. Not coincidentally, this is how .newsrc files store the list of newsgroup articles you've read.

Tom Phoenix's pragma, bundled with 5.004, lets you create constants at compile-time: use constant USERNAME => scalar getpwuid($<);

The Date::Convert module, by Mordechai Abzug, converts between Gregorian, Julian, Hebrew, and astronomical date formats.

Kevin Atkinson's Math::Fraction module lets you manipulate fractions. It's meant to replace

Netscape::Cache, by Slaven Rezic, provides an OO interface to Netscape cache files, so you can see what's being stored locally on your machine.

Thomas Wenrich's DBD::Solid module provides a DBI-standardized interface to Solid databases; Michael Moran's DBD::DB2 does the same for IBM's DB2 database engine.

Ever wanted all the fun of GUI widgets like menu bars, pushbuttons, and scrolling lists - in ASCII? Use Ashish Gulhati's PerlVision.

Or, if you're happy with widgets made out of honest-to-goodness pixels, but want something simpler and smaller than Perl/Tk, try Frederic Chauveau's Sx; version 2.3 was released recently.

Yet another weapon in the Perl GUI arsenal is the PerlQt module. Qt is a cross-platform C++ graphical development toolkit; sixteen-year-old Ashley Winters created an OO interface to it.

Randy Ray created X11:Fvwm, an interface to the Fvwm2 (an X window manager) API.

XForms is a GUI toolkit that lets you create X applications; there's a Perl interface to XForms called Xforms4Perl by Martin Bartlett. See to download XForms.

The Comprehensive Perl Archive Network (CPAN).

What's the size of the window in which your Perl script is running? Tim Goodwin's Term::Size module knows. (As does Perl's ioctl() function, with a little coaxing.)

If you have a US Robotics Pilot and wished you could develop applications for it in Perl, you can use Kenneth Albanowski's PDA::Pilot module, available as part of the pilot-link distribution at

Graham Barr's Errno module defines all of the constants defined in your computer's errno.h file, if there is one.

A simple OO interface for databases, DBSimple, has been made available by Hugo van der Sanden.

Evaluation copies of Trifox's VORTEXPerl, an interface to relational database systems via the VORTEX "database access and performance boosters", is available from

Paul Henson's DCE::DFS module provides an API to manipulate DFS (Distributed File System) access control lists and internals.

Getopt::Regex, by John Williams, lets your programs parse command-line options with regular expressions.

Anarchie is a Macintosh FTP client; Chris Nandor's Mac::Apps::Anarchie provides an interface to it via AppleEvents. Chris also released Mac::Comm::OT_PPP, a Mac interface to OpenTransport/PPP.

Ralf Engelschall's ePerl is a C program that extracts and evaluates any Perl 5 code embedded in an ASCII document; it's available from Similarly, the Text::Vpp module by Dominique Dumont is a "versatile preprocessor" for text; it lets you embed variables and conditionals in your file. Finally, HTML::Embperl does the same for HTML, letting you embed Perl code in your HTML documents.

Radius is a protocol that performs authentication and accounting duties on a network, and Carl Declerck has created Authen::Radius (also known as RadiusPerl) which provides an OO interface to it.

Neil Bowers wrote Locale::Language, which maps the ISO language codes to language names (e.g. en to English). He also wrote Locale::Country, which does the same for Internet domain names (e.g. .no to Norway).

Something I could have used when typesetting Otmar's article for this issue is Text::BibTeX, a module by Greg Ward that reads, parses, and writes BibTeX ".bib" files. If your bibliographic references are in the refer format, then you can use Eryq's Text::Refer module, which supercedes Text::Bib.

Eryq also wrote IO::Scalar, giving you the ability to perform filelike operations (e.g. print() and <>) on scalars and arrays of scalars (with IO::ScalarArray). Busy Eryq then contributed the Convert::BinHex module with Paul Schinder, which extracts the header, data fork, and resource fork from Macintosh BinHex files. Finally, he uploaded MIME::Lite, which lets you send GIFs as e-mail attachments if you can't be troubled to use Eryq's full-blown MIME module set.

If you're wondering why this line has a hyphen in an inco-rrect place, it's because this column wasn't formatted with Jan Pazdziora's TeX::Hyphen module. It uses TeX's hyphenation table, but you don't need TeX to use the module. Jan also released Font::TFM (get character dimensions, information about ligatures, word widths, etc.) and TeX::DVI (an interface to the DVI file format generated by TeX).

Tired of seeing words with eight-bit ASCII characters like "na=EFvely"? Use Jan-Pieter Cornet's Text::Striphigh module to convert the eight bits to seven. (Eventually, you'll upgrade to sixteen-bit Unicode, but sometimes you have to take one step backward to go two steps forward. See Gisle Aas' Unicode::UCS2 module for a preview.)

Steffen Beyer uploaded Bit::ShiftReg and Bit::Vector. The former lets you rotate and shift-with-carry for all C integer types, and the latter does the same for arbitrary-length bit vectors and is actually just another name for Set::IntegerFast. Check out Steffen's web page at

Speaking of vectors, John Williams' Math::VecStat has just been upgraded slightly. It performs basic numeric statistics on vectors.

Jarkko Hietaniemi, isn't just the self-appointed Master Librarian of CPAN, he's a contributor too: he just released the BSD::Time module, which implements the gettimeofday() and settimeofday() functions.

The Net::Bind module, by Kevin Johnson, provides an interface to bind dæmon files. bind is the Berkeley Internet Name Domain service, which allows clients to look up hostnames and addresses.

Graham Barr's Net::SNPP provides a Perl interface to SNPP, the Simple Network Pager Protocol.

Joe Casadonte's libHTML is an alternative to Lincoln Stein's and Steven Brenner's Its syntax looks like this: $h = new libHTML("out"); $h->HR->H3("Reviews"); and it can be retrieved from

PCN lets you manipulate Pointcast Iserver Corporate Channel Files and Content Group Files. Visit developer Erich Markert's Web site at:

RPC (Remote Procedure Call) allows one computer to invoke procedures on another computer. Jake Donham's perlrpcgen generates Perl modules and server shells from RPC interface definitions.

Roderick Schertler released String::ShellQuote, which quotes strings for safe passage through shells, IPC::Signal, containing some utilities for coping with operating system signals, and Proc::WaitStat, which provides functions for interpreting and acting on wait() status values.

ptklpq is a Perl/Tk graphical print queue viewer by Phiroze Parakh. It'll let you remove print jobs, too. You can download it from

James Duncan's NetObj module lets you create a TCP/IP client/server system for distributing modules. With NetObj, you can load modules in real time over the Internet. Requires The Perl Compiler, also known as the B module.

The Norge module by Gisle Aas "deals with various matters specific for Norway." Not speaking Norwegian, I can only guess what those matters are.

I've released Image::Colorimetry, which lets move colors from one colorspace to another, say from RGB to HSV. That particular transformation lets you compute how bright a color is - something you can't do with RGB. It also converts colors to HTML #RRGGBB strings and computes color differences.

John Cristy's Image::Magick module lets you manipulate images via a Perl interface to John's ImageMagick system. ImageMagick is an excellent package for interactive manipulation of images under X, available from

There's already a bundle of Win32 modules that build under Perl 5.004: libwin32, maintained by Gurusamy Sarathy. It includes all of the Activeware extensions, plus five modules by Aldo Calpini (Clipboard, Console, Internet, Shortcut, and Sound), and three by Dave Roth (AdminMisc, ODBC, and Pipe). The bundle doesn't contain binaries; you'll need either Visual C++ 4.x+ or Borland C++ 5.0x+ to build these modules.

The SGMLS module, by David Megginson, parses the output from James Clark's SGMLS and NSGMLS parsers. (SGML stands for Standard Generalized Markup Language; for more information see

Even before layout began for this issue, it was apparent that that this column was going to be substantially larger than last issue's. The first installment of this column was a single page; the next was two pages, and now I'm up to four pages. Clearly it's doubling every issue and will continue to do so indefinitely. Extrapolating, TPJ will be the size of a phone book in three years, the size of the Encyclopædia Britannica in four, and in twenty years it will slow down the Earth's orbit enough to render John Redford's sundials useless. Help out by notifying me at

_ _END_ _

Distribution of CPAN sites in the U.S. and Europe. Screenshot created with Kirk Johnson’s XEarth and the creativity of Jarkko Hietaniemi. XEarth can be obtained from; the coordinates of CPAN sites can be found in CPAN/misc/xearth.names and CPAN/misc/xearth.nonames