Log in

No account? Create an account
What rocks, pt. 1: Perl, Catalyst and DBIx::Class - Neil de Carteret
It's not his fault - we made him that way.
What rocks, pt. 1: Perl, Catalyst and DBIx::Class
It's time for a brief update on what I've been nerding out over recently:

First up, I needed to get my Perl skills back in the ring. As regular readers may remember, over the last 8 months or so I've played with Haskell, Python, and Ruby. They're all great in different ways. If I won the lottery I might be tempted to write an MVC framework for Haskell. But Perl is like an old friend. I might sometimes miss the neat moves you can pull off in other languages, but Perl just has its own set of neat moves instead.

So that lead me on to seeing what Perl had to compete with Rails, Django etc. There are a few answers, but the one all the cool kids are hacking on right now is Catalyst.

File structure-wise, it follows the layout of a normal Perl module, so you haven't quite got the simplicity of a Rails app, but then again if you're familiar with Perl module layouts it's all pretty obvious.

It's been described as a "framework for making frameworks", because unlike Rails there's no sense of having a "default" templating language or a "default" ORM. In fact, you don't need to use either. But if you do, then TT, Mason, and Clearsilver (templating) and DBIx::Class and Rose::DB (ORM) are very well supported with Catalyst plugins to integrate them into the framework. And there are plugins to support many other options. I'm using TT and DBIx::Class, despite knowing Mason far better, to write a wee to-do application.

The documentation is copious and well written, but occasionally confusing. But between a very active mailing list, IRC, and Google I haven't had any major issues. And the feature set is very impressive.

Which leads me onto the fact that I've actually been hacking on DBIx::Class much more recently. Stemming from a need to add a couple of missing features to a plugin, I'm now teamed up with another chap to add tree-shaping features (adjacency lists, nested sets and materialised paths, for those that care).