The CPAN directory of Randal L. Schwartz

Hi. I'm Randal L. Schwartz, general manager of Stonehenge Consulting Services, Inc. You can reach me by email at

Things in the CPAN

Shell to Perl translator
My famous Shell to Perl translator is available for download right here in the CPAN.

Things not in the CPAN

I've heard that putting an index.html file into my CPAN directory helps people find things that aren't in the CPAN for me. So here goes:
My home page
My recommended books page
My recommended books page at lists the Perl books (and other books) that I would pay money for, and includes an link to those books for easy purchase.
Stonehenge Consulting Services, Inc. home page
Perl Training from Stonehenge
A full description of on-site and open-enrollment Perl training is available at
Various pictures I've taken
I've snapped thousands of digital pictures over the past year with my Nikon CoolPix camera. Check them out at
My WebTechniques Perl columns
Probably the most visited area of my website, every past monthly column I've done for WebTechniques Magazine is available online at These columns give basic examples of techniques of using Perl for the web, including examples of and LWP. Also, the code listings are brought out into a separate link for easy downloading.

You can go directly to these columns:
col01 col01 listing CPAN, NNTP, Clarinet Comics (Apr 96)
col02 col02 listing Giving 'more' (May 96)
col03 col03 listing Getting 'more' (Jun 96)
col04 col04 listing flocking, recent visitors (Jul 96)
col05 col05 listing tiny database, htaccess (Aug 96)
col06 col06 listing what's new? (Sep 96)
col07 col07 listing bad links (Oct 96)
col08 col08 listing browser dependence (Nov 96)
col09 col09 listing random thoughts (Dec 96)
col10 col10 listing tracking bad hits (Jan 97)
col11 col11 listing anonymous proxy server (Feb 97)
col12 col12 listing searchable web pages (Apr 97)
col13 col13 listing non-visitor counter (May 97)
col14 col14 listing better bad links (Jun 97)
col15 col15 listing back issues of Dilbert (Jul 97)
col16 col16 listing web chats (Aug 97)
col17 col17 listing two-pass image serving (Sep 97)
col18 col18 listing front door, please! (Oct 97)
col19 col19 listing Watch that picture change (Nov 97)
col20 col20 listing search in progress page (Dec 97)
col21 col21 listing Slow down the download! (Jan 98)
col22 col22 listing Tar'ing up a tree (Feb 98)
col23 col23 listing Doctor is IN (part I) (Mar 98)
col24 col24 listing Doctor is IN (part II) (Apr 98)
col25 col25 listing Where did they go? (May 98)
col26 col26 listing How did they get here? (Jun 98)
col27 col27 listing Parallel bad links! (Jul 98)
col28 col28 listing Parallel stress tester (Aug 98)
col29 col29 listing Thumbnails with PBMTOOLS (Sep 98)
col30 col30 listing Converting HTML to (Oct 98)
col31 col31 listing Special purpose mirrors (Nov 98)
col32 col32 listing A remote cookie jar (Dec 98)
col33 col33 listing Handling hundreds of pictures (Jan 99)
col34 col34 listing Prefork-Compressed Proxy Server (Feb 99)
col35 col35 listing Incremental link verifier (Mar 99)
col36 col36 listing Add image size to links (Apr 99)
col37 col37 listing Perl jobs and GIFgraph (May 99)
col38 col38 listing Processing forms remotely (Jun 99)
col39 col39 listing Countdown to Y2K (Jul 99)
col40 col40 listing Handling multipage forms (Aug 99)
col41 col41 listing mod_perl-enabled picture server (Sep 99)
col42 col42 listing Meta-keywords index generation (Oct 99)
col43 col43 listing Automatically testing a form (Nov 99)
col44 col44 listing Search This Site (Dec 99)
col45 col45 listing What's new with RSS (Jan 00)
col46 col46 listing Uploading files, sending MIME (Feb 00)
col47 col47 listing Building an icon factory (Mar 00)
col48 col48 listing Web access logs with DBI (Apr 00)
col49 col49 listing Self-registering password protection (part 1) (May 00)
col50 col50 listing Self-registering password protection (part 2) (Jun 00)
col51 col51 listing Simple queries with XML and DBD::RAM (Jul 00)
col52 col52 listing Making .tar.gz files on the fly (Aug 00)
col53 col53 listing Getting image colors to text (Sep 00)
col54 col54 listing Highlander: one instance at a time (Oct 00)
col55 col55 listing Poor man's load balancer (Nov 00)
col56 col56 listing Poor man's web chat (Dec 00)
col57 col57 listing Leveraging with Open Source (Jan 01)
col58 col58 listing Visualizing your traffic flow (Feb 01)
col59 col59 listing Simplified Voting - Am I Hot or Not? (Mar 01)
col60 col60 listing Embedding a dynamic image in CGI (Apr 01)
col61 col61 listing Basic cookie management (May 01)
col62 col62 listing Hooking up with the news (Jun 01)
col63 col63 listing Calculating download time (Jul 01)
col64 col64 listing Getting One-Click Processing (Aug 01)
col65 col65 listing Simple Table-Output Spanning and Sorting (Sep 01)
col66 col66 listing Rendering a calendar to HTML (Oct 01)
col67 col67 listing Customer Surveys and Writing XML (Nov 01)
col68col68 listing Keeping robots from stuffing your forms (Dec 01)

My UnixReview/SysAdmin Perl columns
Similarly, every past bi-monthly column I've done for UnixReview Magazine is available online at However, my column outlived the magazine, and is now published both online for Performance Computing, and in hardcopy for SysAdmin Magazines. I still call it the UnixReview columns however. These columns give a basic introduction to Perl in easily digestible chunks.

You can go directly to these columns:
col01 Basic Parsing (mar 95)
col02 Word Counts (may 95)
col03 Regular Expressions (jul 95)
col04 Tiny Database (sep 95)
col05 Subroutines (nov 95)
col06 Sorting (jan 96)
col07 Simple References (mar 96)
col08 Subroutine References (may 96)
col09 Text-grep (jul 96)
col10 Wrappers (sep 96)
col11 List manipulation (nov 96)
col12 Here documents (jan 97)
col13 Intro to objects (mar 97)
col14 More about objects (may 97)
col15 Logfile analysis (jul 97)
col16 Recursive directory tasks (sep 97)
col17 Finding shadowed executables (nov 97)
col18 Bit operations (jan 98)
col19 Include files (mar 98)
col20 Expressions in text (jun 98)
col21 Making choices for choices (aug 98)
col22 Using the CPAN effectively (oct 98)
col23 Editing files in-place (dec 98)
col24 Persistent data (feb 99)
col25 Getting a date with Perl (apr 99)
col26 Computing primes (jun 99)
col27 Expanding symbolic links (aug 99)
col28 Compiling regular expressions (oct 99)
col29 Figuring phone-y words (dec 99)
col30 Deep copy and recursion (feb 00)
col31 Rainy Day Templating Fun (apr 00)
col32 Simple tricks with printf (jun 00)
col33 Taint checking made simple (aug 00)
col34 Little acts of magic (oct 00)
col35 So what's the difference? (dec 00)
col36 What is that, anyway? (feb 01)
col37 A MIME is a terrible thing to waste (apr 01)
col38 It's all about context (jun 01)
col39 Developing a Perl routine (aug 01)
col40 Parsing interesting things (oct 01)

My Linux Magazine Perl columns
And finally, every past monthly column I've done for Linux Magazine is available online at These columns are delayed from hardcopy by 90 days, so you may have to wait a while before seeing them show up here. These columns give a basic introduction to Perl in easily digestible chunks, with an emphasis on things interesting to Linux users.

You can go directly to these columns:
col01col01 listingUsing things from the CPAN (Jun 99)
col02col02 listingTieing up loose ends (Jul 99)
col03col03 listingScripting your Apache server with Perl (Aug 99)
col04col04 listingRandom sentence generator (Sep 99)
col05 Many ways to launch processes (Oct 99)
col06col06 listingNo News is not Good News (Nov 99)
col07col07 listingWatching your web server (Dec 99)
col08 Getting better references (Jan 00)
col09 Subroutine references (Feb 00)
col10 Filehandle references (Mar 00)
col11 Intro to objects, part 1 (Apr 00)
col12 Intro to objects, part 2 (May 00)
col13col13 listingMoving your news service (Jun 00)
col14col14 listingCapturing CGI Errors as Email (Jul 00)
col15col15 listingGetting your kids to do the work (Aug 00)
col16col16 listingForking parallel link checker (Sep 00)
col17col17 listingThrottling your web server (Oct 00)
col18col18 listingDiscovering incomprehensible docs (Nov 00)
col19col19 listingChaining Babelfish for silly translations (Dec 00)
col20col20 listingCaching in your chips (Jan 01)
col21 Getting some directory assistance (Feb 01)
col22col22 listingHeadlines in the news (Mar 01)
col23col23 listingAuthenticated remote updates (Apr 01)
col24col24 listingProcessing footnotes (May 01)
col25col25 listingSimple online quiz technique [part 1] (Jun 01)
col26col26 listingSimple online quiz technique [part 2] (Jul 01)
col27 Understanding regular expressions (Aug 01)
col28col28 listingCleaning out a logging database (Sep 01)
col29col29 listingSafe undumping (Oct 01)
col30col30 listingFinding files incrementally (Nov 01)