Perl5 'two camels' logo

Malcolm Beattie's work on and with Perl

This page was last checked for believability on 3 June 1999. If you're reading this page a long time after the above date then you ought to be appropriately suspicious of links, facts and data which you think may have changed since then.

Here is a list of my main Perl projects. Modules mentioned below are also available from any CPAN archive in addition to the home site used in the hot links below.


WING (standing for Web IMAP/NNTP Gateway) is an Open Source Apache/mod_perl based system which allows users to access email held on an IMAP server via any web browser. The browser need not support Java, JavaScript or any plugins. Browsers which support tables are recommended and browsers which support cookies gain the advantage of a slightly more secure session. WING is used on our central mailstore server cluster here at Oxford University. For details of the Perl modules, instructions and mailing list information, see the WING page.


I've written an extension module which provides Perl access to Mark Crispin's c-client library, as used by pine and the University of Washington imap daemon. It provides access to many different formats of mail folders, including using IMAP to access folders held on remote hosts. The latest distribution is MailCclient 0.5 and is now fairly complete and fairly well documented. Here is README.MailCclient. The module, one of the foundations of WING mentioned above, has now been in use for 9 months on our heavily used central mail server and has proved to be solid.

Perl 5.005

I was "Patch Pumpkin" holder for the majority of 5.005 development, a term which means that, within the perl5-porters group which develops Perl, I had the responsibility for the development, integration and release of version 5.005. Towards the end of development, I had to step down because of time pressures caused by family problems and Gurusamy Sarathy took over and completed the release cycle admirably.

The major new features of Perl version 5.005 are

The latest maintenance and development releases of Perl 5.005 are available from any CPAN archive.

Perl Compiler and multi-threading

The compiler kit and my multi-threading patches were merged and integrated into Perl as a part of the 5.005 development cycle. They are no longer available separately. The goal (successfully reached) was to ease further development since before the merge, I was spending most of my time merging other changes to Perl back into my own development tree. As of 5.005, the compiler modules are available by default and multi-threading can be configured at compile-time but they are most definitely not suitable for production use. Work on both has continued (picked up by other developers, I'm glad to say, due to my absence) during the next Perl development cycle. The latest development versions of Perl (those revisions numbering from 5.005_50) include many fixes for both compiling and multi-threading but it should be noted that these are still development versions of Perl and so they cannot be claimed to be production quality.


I integrated Perl with Exim (a Mail Trasfer Agent). The latest versions of Exim have included the code (as a compile-time option). The patches are no longer distributed separately.

Thread modules

Two multi-threading utility modules are available which provide useful functionality and serve as examples are available: Thread::Pool 0.1 and Thread::Iterator 0.1.

Profiling Perl code

Devel::OpProf 0.2 lets you profile your Perl code to find out how many times each type of instruction of Perl's internal virtual machine is executed during a run of your Perl program.


This is an Apache/mod_perl PerlAuthHandler module to allow web hierarchies to be username/password authenticated against any IMAP server. The current version is 0.1 (i.e. a preliminary and only lightly tested version). There's no README or Makefile.PL, just the .pm file itself (with pod documentation in it, of course) which needs to be copied to the Apache directory where all your other mod_perl Apache .pm modules live. Here is


The Safe extension allows the creation of compartments in which perl code can be evaluated in a restricted environment. Each compartment has a separate escape-free namespace (except for objects explicitly chosen to be shared by the main program) and a mask for disallowing chosen perl operators. The Safe extension has been part of the main perl distribution since perl version 5.002 and there is also a module called Opcode (by Tim Bunce) which provides a more high level API for the underlying Safe module.


The Tcl extension provides a small but complete interface into libtcl and any other Tcl-based library. It lets you create Tcl interpreters (as perl5 objects), bind in commands to them (either perl subroutines or C functions dynamically loaded with the DynaLoader extension) and execute Tcl code in those interpreters. The latest version is Tcl-b1. I haven't touched this module for years and it probably doesn't build with recent versions of Tcl but it's fairly simple so it shouldn't be too hard for someone to resurrect if they wanted to.


The Tcl::Tk extension is an add-on extension for the above Tcl extension which provides access to libtk via Tcl syntax. This is useful for running legacy Tcl/Tk code from a perl program but for new perl programs, Perl's native Tk extension is better in almost all situations. The latest version is TclTk-b1. I haven't touched this module for years and it probably doesn't build with recent versions of Tk but it's fairly simple so it shouldn't be too hard for someone to resurrect if they wanted to.


The Mmap extension lets you mmap in a file as a Perl variable on platforms that support BSD or POSIX.1b mmap. It is primarily useful for mapping in large files into your address space as read-only. You can map a file read-write if you are very careful only to ever update the variable in place. The latest version is Mmap-a2.

Safe CGI perl

safecgiperl is intended to be installed on a World Wide Web server and allows CGI programs written in Perl5 to be run in a sanitised environment. It makes use of the Safe extension module for Perl5--any attempted unsafe operation in the CGI program is trapped and causes a fatal compile-time error. The latest safecgiperl version is beta1. This program (slightly tweaked for the specific local environment here) has been in heavy use for about four years and has proved to be solid and reliable.

Home page