Perl Module Recommendations

Know that all modules mentioned here can be found on CPAN because anything else doesn't really matter in my opinion.

Frameworks

  • POE is a framework for asynchronous events in a single process without threading.
  • The Catalyst Framework is a mighty MVC based system I use for all web projects since I ran into it.

Web Development in General

  • The Template-Toolkit is a very powerful templating engine. It's not limited to HTML, is easily and flexible extensible and already has lots of invented wheels, both on CPAN and in the module distribution itself.
  • I often use Textile for markup to HTML processing. Be sure to use a version above 2, as the ones before were missing some features like foot notes.
  • CGI::Expand allows the passing of data structures through the CGI query string. There's a Catalyst plugin that does the same if you're using that framework.
  • HTML::Tree is a convenient method to create HTML and XHTML document structures.
  • XML::RSS is an easy way to create RSS Feeds for your site.

Web Development with Catalyst

  • See also the View::TT module for integration of the Template-Toolkit into Catalyst.
  • The StackTrace Plugin is a must-have in every Catalyst module of mine.
  • The Unicode Plugin, well, I think you can guess what it's for. It's handling the unicode work at the catalyst level.
  • The DefaultEnd Plugin does all the forward-on-end decisions for you. It will forward to render your template unless your status code indicates it shouldn't or there's actually already something in your $c->response->body.
  • For the use of Sessions, see the Session Plugin as well as it's Store and State enhancements.
  • Many applications need Authentication as well as Authorization mechanisms.
  • There's also a Textile Plugin.
  • The DBIx Class Schema Model allows easy integration of DBIx::Class schemata into your Catalyst application.
  • Use the Params-Nested Plugin to use data structures in your query parameters like PHP and Rails do, and not just plain flat key value pairs.

OO, Module Creation & Co.

  • Moose is a pretty new Object Orientation Framework. I especially like the accessor creation and method overload syntax.
  • Class::C3 for more sane method inheritance dispatching. It gives you the same functionality as NEXT but doesn't have it's short-comings (more sane source, outsourced Algorithm, no need to pass arguments or repeat method name when redispatching).
  • For exceptions I prefer Exception::Class at the moment.
  • Class::Inspector for an easy interface to information and structure about and of a class.
  • Sub::Install makes it easier to install code references into a classes symbol table without hassling with type globs by hand. This can make some modules much more readable.

Databases and Data Structures

  • DBIx::Class is my ORM of choice. Spawned out of the shortcomings of Class-DBI with a pretty complete feature set and a very sane system for building your own reusable database schemata.
  • DBD::SQLite is the DBI driver for the SQLite database system. Great for development and testing. Make sure you have version 3.
  • YAML::Syck is a pretty fast implementation of the YAML specification for storing (and retrieving) data structures into flat files (or scalars).
  • Class::Struct is a core package that makes it easy to create classes that just carry data. Kinda like structures in C.

Utility Modules

  • Scalar::Util has some pretty nice helper functions. I mostly observe myself using refaddr, weaken and blessed though. You can find this module in the Scalar-List-Utils distribution.
  • Getopt::Long for parsing the options to your commandline scripts.
  • Path::Class makes it easy to handle paths in a platform-independant manner.
  • You can use Text::SimpleTable to create nice looking table outputs in ASCII.
  • Pod::Usage allows you to generate Usage methods for your command line scripts (for example, via --help) out of your POD documentation. This module is part of the Pod-Parser distribution.
  • Proc::ProcessTable gives you easy access to the list of the running processes and their properties.
  • Perl6::Junction allows you to use the Perl 6 junction syntax in Perl 5.
  • Sub::Uplevel runs a closure as if the current callframe wouldn't exist.
  • PadWalker allows you to access the lexical variables in your calling frames.
  • WWW::Mechanize lets your Perl scripts browse the web.

Development Support and Testing

  • Benchmark is there to get the times code pieces need to run. You don't need to install this, it's a core module.
  • B::Deparse is a wonderful program that shows you how perl would parse your code. This is a core module.
  • Data::Dump is a very nice alternative for the core Data-Dumper module.
  • Test::More is a pretty good start for your unit tests.
  • If you want to optimize your code, you can profile it with the core module Devel::DProf

Models

  • DateTime is the almighty™ perl date class. Always worth a look if you're looking for a solution regarding dates and times.

Logging and Reporting

  • Log::Log4perl is the Perl implementation of the popular Log4j system in Java. The main advantage is that it's more a logging framework than just a logging class. It also gives you the possibility to change the logging configuration for running processes, which is great for analysing problems in live systems.

Interesting modules I need to look at