The evolution of Perl frameworks
*by [Mark Stosberg](http://mark.stosberg.com/blog)*
[In 2006](http://www.perl.com/pub/a/2006/10/19/cgi_application.html), the arena
of Perl web frameworks pitted the heavyweight [Catalyst](http://www.catalystframework.org/) against the lightweight
[CGI::Application](http://www.cgi-app.org/). Since then Perl's framework
options have continued to evolve. While both CGI::Application and Catalyst
remain popular, several new options have appeared lately. Here's a quick
rundown.
**[Titanium](http://www.summersault.com/community/weblog/2008/08/09/announcing-titanium-a-solid-lightweight-web-application-framework.html)** provides CGI::Application and a bundle of recommended plugins
with unified documentation and easier installation. Because the underlying
components are the same solid ones that have already been in use, it's safe and
stable to use, despite the new name. Future plans include providing a download
package which bundles the dependency chain, for even easier installation.
**[HTTP::Engine](http://search.cpan.org/perldoc?HTTP::Engine)** is Moose-based
evolution of the HTTP request object we saw in Catalyst, along with the
abstractions to run web apps on various server backends. In short, it focuses
on the HTTP parts of the web framework stack. On top of that you can build a
complete framework in whatever style you want.
**[Mojo and Mojolicious](http://mojolicious.org/)** represent a project lead
by Sebastian Riedel, one of the original Catalyst contributors. Mojo is
distictive for having no dependencies beyond core Perl. Mojo provides the same
kind of low-level HTTP components as HTTP::Engine, while Mojolicious represents
one possible complete framework built on top of it. Mojolicious' distictive
feature is a new dispatching design in the spirit of Ruby-on-Rails "Routes". I
have more [in-depth review of
Mojo.](http://mark.stosberg.com/blog/2008/11/review-of-mojo-087-a-new-perl-web-framework.html)
Some trends I see:
* *Shared infrastructure* -- While Perl frameworks continue to compete at a
high level, we continue to collaborate on shared utility modules. Projects like
HTTP::FillInForm and Data::FormValidator get used by several frameworks, not re-invented.
* *CGI.pm must die* -- While we share some things, HTTP::Engine, Catalyst and
Mojo have all invented their own HTTP request object, replacing the function of
CGI.pm. Clearly there is an interest is moving beyond this old standby, which
crams 172 subroutines into the CGI name space. (CGI::Application remains neutral on this point,
outsourcing the query object)
* *Potential for convergence* -- A number of CGI::Application and Catalyst
plugins are rather similar, but not interchangable. Because they are open
source, they are usually easy to port from one framework to the other, but this
is not ideal. HTTP::Engine and Mojo are both a kind of "framework for
frameworks". I see potential for projects to agree on which backend they use,
while providing distinctive experiences for programmers who may want to choose
a lightweight framework or a featureful one. The result could be web framework
plugins which more widely useful to the Perl community.
*[Mark Stosberg](http://mark.stosberg.com/blog) has been using programming Perl for the web for over a decade. He is
the Principal Developer at [Summersault](http://www.summersault.com) and
maintains several CPAN modules including
[Titanium](http://search.cpan.org/perldoc?Titanium) and
[Data::FormValidator](http://search.cpan.org/perldoc?DataFormValidator).*