Perl has changed a lot in the last 10 years. If you've ever wanted to get into Perl, you may have seen plenty of hairy, write-only, ob-fu contest-winning dirty old Perl. That's called "bad programming", please ignore it. You can write FORTRAN in any language.
You should be writing Modern Perl.
You should be starting with use strict and use warnings (and if you're writing in Perl 5.12, use strict is already there by default).
While Perl may be more popular in areas such as genetic research, it has plenty to offer for web developers, especially with the Perl revolution spitting out several (too many to count!) web frameworks, applications, and cool modules. It's running large websites like Amazon and Slashdot, the New York Times and the BBC, and plenty of small ones such as the search engine DuckDuckGo. Perl is still about "Making easy things easy and hard things possible."
Coming from Ruby or Python? Read this little blurb Practical Modern Perl for Ruby and Python People (2010)
Note on spelling: "Perl" generally refers to the language itself. "perl" generally refers to the interpreter. "PERL" isn't used, except by old Unix guys used to everything being spelled that way, and people who believe PERL is an acronym for Practical Extraction and Report Language. Or Pathologically Eclectic Rubbish Lister. Or any of the others too impolite to mention here.
Of course, if you're running Linux, FreeBSD, Mac OSX or some other *nix, you likely already have Perl : ) However, you may not have the latest Perl.
Downloading the latest version of Perl
- ActiveState Perl - ActivePerl for Linux, Solaris, and Windows, using the Komodo IDE
- Strawberry Perl - The open-source pre-packaged Perl for Windows
- Win32 Perl Wiki
- Win32 Perl FAQ
- cygwin - get the advantage of POSIX utilities and unix tools (ssh, grep, bash, gcc) with your pre-compiled perl on Windows (see also Cygwin FAQ)
- CamelBox - a build of Perl with Gtk+, packaged and ready for use on 32-bit Windows systems
Perl 6 is not an upgrade of Perl 5. It is instead a new language in the Perl family, written from the ground up. Perl 5 has been able to take many new ideas from Perl 6 and continues to evolve as "Perl 5", but for those interested in Perl 6, here are some links:
- Perl 6 main page and current news about Perl 6
- #perl6 on irc
- Rakudo - a Perl 6 compiler, which you can download to write and use Perl 6 code
- Check out the Parrot Virtual Machine, originally developed as part of the Perl 6 project, but currently supports many languages (see also Parrot VM on Wikipedia)
Looking for a Perl IDE?
- Komodo IDE - from ActiveState
- Padre - Perl IDE, also for Perl 6
- EPIC - Perl editor and IDE for Eclipse
- Perldoc - Perl documentation
- POD (Plain Old Documentation) - a markup language encouraged and used for most Perl documentation. Maybe the most important documentation! POD on Wikipedia
Regular Expressions Documentation/Tutorials
Besides CPAN, regexen are one of Perl's greatest strengths
- PerlReTut - at perldoc
- Maintaining Regular Expressions - at Perl.com
- Mastering Regular Expressions - by Jeffrey Friedl. An excellent book about regular expressions in general, though much of it is Perl-specific.
- CPAN FAQ - Newbies, read this! It's about more than just how to use CPAN! A sort of Ultimate Perl Resource List
- CPAN - the Comprehensive Perl Archive Network (can't use CPAN? Check out Yes, even you can use CPAN first)
- CPAN's search feature for Perl modules now has a decent, better replacement known as metaCPAN, check it out!
- Kobe's CPAN search - Another search engine for CPAN which also shows Windows PPM modules from ActiveState
- ActivePerl PPM Packages - get PPM packages for ActivePerl
- Task::Kensho - too many CPAN modules that seem to do the same thing? Not sure where the elegant Perl is? Look here
- I have to mention Moose - an extension of the Perl 5 object system, based on the Perl 6 object system. Moose on Wikipedia
Perl developer communities
- O'Reilly's Perl resource
- Perl Monks - It may look outdated, but actually very active : )
- Perl Mongers - find your local Perl Monger group
- Enlightened Perl Organisation
- YAPC - Yet Another Perl Conference (held in many continents : )
I've listed most of these with Amazon.com links, where you can grab the ISBN and read reviews, even if it's not the bookstore for you (note: free international shipping? look for books at Book Depository).
General and beginning books
- Perl for Web Site Management - by John Callender. A book for someone who isn't a programmer ("the accidental programmer"), and finds him or herself needing to learn some Perl because they are running web sites on a Unix machine. Read a review
- Learning Perl (the Llama book, for beginners) and the Learning Perl Student Workbook - a small companion book with more Llama-level problems for students to practice with
- Intermediate Perl (the Alpaca book, a follow-up of the Llama book)
- Programming Perl (the Camel book)
Advanced and specialty books
- Advanced Perl Programming - by Sriram Srinivasan
- Perl Best Practices - by Damian Conway. TIMTOWDI confusing you? A must-read
- Object Oriented Perl - by Damian Conway. A good book to start learning Object Oriented programming in Perl
- Data Munging with Perl - by Dave Cross. Perl-specific techniques for what Perl is very good at: data conversion and manipulation
- Effective Perl Programming: Ways to Write Better, More Idiomatic Perl (2nd Edition) by Joseph N Hall, Joshua A. McAdams and brian d foy - includes: working with Unicode in Perl; tricks with filehandles; new regex features in Perl 5.10 and later; playing with pack(); using closures to make things simpler; managing distributions; tricks with testing, and more... also has accompanying online extension, The Effective Perler, a blog.
- Higher Order Perl - by Dominus (About page and link to PDF) - Learn Functional Programming in Perl
- Perl Hacks: Tips & Tools for Programming, Debugging, and Surviving - by chromatic, Damian Conway and Curtis "Ovid" Poe (2006) Read a review
Databases, Apache, CGI, etc
- The Definitive Guide to Catalyst: Writing Extensible, Scalable and Maintainable Perl–Based Web Applications - by Kieren Diment, Matt Trout and others (2009)
- Network Programming with Perl - by Lincoln Stein (2001) - SSH, telnet, parsing binary email attachments, using Perl modules and some fully coded programs
- Writing CGI Applications with Perl - by Kevin Meltzer and Brent Michalski (2001) Read a review
- Mod_perl Cookbook - by Geoffrey Young, Paul Lindner and Randy Kobes (2002)
- Programming the Perl DBI - by Tim Bunce (2000)
- Developing Web Applications with Apache, MySQL, memcached, and Perl (Wrox Programmer to Programmer) - by Patrick Galbraith (2009)
Perl tutorials, articles
- http://perl-tutorial.org/ is where the Perl community is trying to put together a good list of all the Perl tutorials that don't suck, use Modern Perl and insist on best practices, like 'use strict'. It's probably the first place someone new to Perl should start when looking for tutorials.
- Perl 5 by Example - by David Medinets
- Tutorials - PerlMonks
- Perl Training Australia's "Course Notes"
- Small Perl quests for a Beginner? - PerlMonks
- Real Life Perl Exercises- including beginners' project suggestions @PerlMonks
- Using Look-ahead and Look-behind (regex goodness) - by Roy Johnson (see also PerlReTut mentioned above under "Perl Documentation")
- Arrays: A Tutorial/Reference - by jdporter @ PerlMonks
- Perl Reference Cards - by refcards
- The Perl Debugger
- Neat Debugger Tricks (2005)
- Debugging and Data::Dumper in Perl (2008)
- Simple Debugging - by mst (Matt S. Trout) (2010)
- Devel::DProf - a Perl profiler
- About NYTProf - a newer Perl profiler, originally developed by and for the New York Times. NYTProf on CPAN
- Attack of the Killer Bugs! - SitePoint article (2002)
Frequent "gotchas" and things to be aware of
- Why it's stupid to "use a variable as a variable name", A More Direct Explanation of the Problem, and What if I'm Really Careful? - three articles about a common newbie (and not-so-newbie) error
- Far More Than Everything You've Ever Wanted to Know about Prototypes in Perl - by Tom Christianson
- Perl Idioms Explained - a collection of articles on PerlMonks (what are those cryptic symbols?? : )
- Coping with Scoping - scope in Perl
- Suffering from Buffering? - gotchas when perl buffers
Articles/Blogs (rather random selection really)
- Perl Weekly Newsletter - A newsletter for those using Perl but who don't have time to wander around the various blogs and articles... this is sort of a weekly mail listing hand-picked "best Perl" stuff (by Gábor Szabó)
- perl.com - regular articles about Perl, Perl development summaries, blogs, and links to a variety of resources
- blogs.perl.org - just one of several collections of Perl blogs
- Perl Is Alive.com - Articles about Perl and news
- chromatic's Modern Perl blog
- How I Learnt to Love Perl - by David McLaughlin (2008)
- Falling Out of Love With a Language - by Piers Cawley (2010)
- autodie - the Art of Klingon Programming It is better to die() than to return() in failure.-- Klingon programming proverb (2008)
Oldies but still on the must-read list:
- Perl articles for Linux Mag - by Randal Schwartz
- Perl articles for Sysadmin Mag - by Randal Schwartz
- Perl articles for WebTechniques - by Randal Schwartz
- The Perl Tutorial: What's Perl? (2001)
- Review of "Beginning Perl" by Simon Cozens - by Kevin Yank (2000)
- Programming Perl 101 - a sort of intro to web building with Perl by hand (2000)
- Embedding Perl into Webpages (2000)
- Access your MySQL database with Perl (2001)
If you have been running scripts from Matt's Script Archive, please try nms instead.
Specifically, if you're looking for FormMail, on the programs page look for TFMail, the Improved Form Mail script. Any script that instructs you to have hidden input fields containing email addresses in your HTML should be avoided!!
Beyond vanilla Perl
You can use plain CGI, but there's more than that out there:
- FastCGI - Run CGI scripts faster, in multiple languages (not to be confused with the CPAN module CGI::Fast)
- Mod_perl - practically an extension of Apache!
- HTTP::Engine - a Moose-based Web Server Gateway Interface and HTTP Server Engine Drivers
- (web) Catalyst - a "heavy" application framework that makes generous use of CPAN
- (web) Web::Simple - written by one of the authors of Catalyst, for when you need a light, bare-bones web application. Web::Simple on CPAN
- (web) CGI::Application - a lighter application framework built of CGI modules, but also comes as Titanium, a wrapper with additional modules, easier installation and unified documentation
- (web) Dancer - a mini web application framework based on Ruby's Sinatra and similar to Python's Bottle and Flask frameworks (by default using PSGI and works well with Plack::Middleware). See sites who are using Dancer today listed on the dancefloor
- (web) Mojolicious - another MVC web framework
- Plack - an interface between Perl web frameworks and web servers (based on Ruby's Rack and Python's WSGI)
- POE (Perl Object Environment) - a multitasking and networking framework
These are only some Perl frameworks listed above; there are more: Gantry, Rose, Jifty and WebGUI just to name a few of the web frameworks. Read more about Perl frameworks and how to find the right one for you.
Content Management Systems
- Template Toolkit and the O'Reilly article Getting started with Template Toolkit (2004)
- HTML::Template - a lightweight template library (SitePoint article, 2005)
- Badger - an application toolkit designed to simplify the process of building object-oriented Perl applications... some of it is based off Template Toolkit, whose O'Reilly book features a badger on the cover. Badger on CPAN
- Win32::OLE - an interface to OLE Automation from Perl. OLE Automation brings VisualBasic-like scripting capabilities and offers powerful extensibility and the ability to control many Win32 applications from Perl scripts
- Spreadsheet::WriteExcel - Runs on *nix too
- Spreadsheet::ParseExcel - Runs on *nix too
- DBIx::Class - an SQL to OO mapper with an object API
- DBD::SQLite - Self-contained RDBMS in a DBI Driver
- DBD::ODBC - Open Database Connectivity driver for Perl's DBI
- DBI - Original Perl Database Interface Module and DBI recipes
- http://www.nntp.perl.org/group/ - nntp perl groups
- comp.lang.perl.misc - Miscellaneous Perl stuff
- comp.lang.perl.announce - Perl-related announcements
- comp.lang.perl.modules - discussions on Perl modules
- comp.lang.perl.tk - discussions on Perl/Tk
If you notice any typos, bad links, or feel an important resource has been left out (but, notice how long this is and how much I've still left out), send a PM to a moderator (anyone in green or blue).
-> PM Mittineague