I just gave a talk at YAPC::NA 2009 entitled Take Advantage of Modern Perl. I use an extemporaneous style with terse slides, but I mentioned several modules and links worth exploring. I plan to explain some of those modules in more detail in the future. Until then, here are terse explanations and recommendations.
- Enlightened Perl is a great organization exploring similar issues. If you don't read or participate in Planet Perl Iron Man, please do.
- The SUPER module works around a problem in method dispatch to overridden methods.
- The UNIVERSAL::ref module makes the
ref()builtin more reliable and allows objects to override what
ref()reports for them (good for overloading).
- The Time::y2038 module makes your lexical scope in Perl -- regardless of compilation settings for 32/64 bitness and IV size -- safe for calculating dates and times past 2038. If you don't know what that subordinate clause means, you need this module. The Time::y2038::Everywhere module makes these functions safe globally.
- The CLASS module lets you replace ugly
- The autobox and autobox::Core modules turn primitives into objects so that you can call methods on them. This is difficult to explain; play with it.
- The Moose distribution provides a powerful, extensible, usable object system for Perl 5.
- The signatures and Method::Signatures modules provide usable function and method signatures to Perl without source filtering (but with a bit of black magic).
- The Exception::Class module lets you throw exceptions based on objects in a clear and maintainable way.
- The Modern::Perl module lets you enable several important but optional features in Perl 5.10 and newer with a single command.
- The Why of Perl Roles gives several links to explain what roles are and why they're important in OO programming
- The Module::Build is a core module that's much easier to work with (and cleaner and better maintained) than ExtUtils::MakeMaker.
- The autodie module replaces Fatal to provide better error messages, remove boilerplate code, and allow extensibility for error reporting on builtins.
- The Devel::Declare module
provides the black magic necessary for wonderful modules such as
Method::Signaturesto extend Perl 5 without using Filter::Simple.
- The MooseX::Declare module extends Perl's syntax to make Moose code prettier and easier and more declarative.
- The Devel::NYTProf module is a working Perl profiler that doesn't randomly crash like the core profilers sometimes do.
- The Perl::Critic module provides a framework for static code analysis of Perl 5 code. This means you can identify problems and poor style, tailoring your analysis to your local style.
- The MooseX::MultiMethods module provides a nice syntax for multiply-dispatch methods. This is another feature easier to understand if you play with it than if I write about it.
- The perl5i project pulls together these modules and more to work together nicely to provide better defaults for Perl 5.