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,weakenandblessedthough. 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.