In the second half of 2005 (the first year of my uni degree), I took a subject called Introduction to Internet Technology.  Out of all the subjects I’ve taken so far for my degree, this one easily affected my career path the most profoundly.  It made me realise precisely where I wanted to channel my professional efforts: web programming.

Our first assignment for this subject required us to use Perl to build an online job agency (the original specification in Word format is available).  I had an absolute ball working on this, and the appreciation that I developed for Perl is why I sought employment at for my internship—which was ultimately life-changing.

After this assignment was finished I left it online, and eventually it got spidered by Google.  Some time later I received a cease-and-desist order from the owner of the (now defunct) service.  Evidently he was concerned about me being a professional contender or something.  I didn’t know whether to be extraordinarily flattered or question the guy’s sanity.

Online demo

Bash the demo around as much as you like.  You are more than welcome to create accounts, but some username/password pairs already exist if you’re lazy:

Source code

Download a ZIP of the source code if you’re interested, but heed the following warnings:

  • This is not how I would do it now. I wrote this code in 2005 as a first-year uni student.  I’ve been a full-time Perl programmer since the end of 2006.  I post the code here for nostalgia and not as a demonstration of my professional abilities.
  • This is not how you should do it now. Most Perl web applications born before 2006 probably look like this (which might be why Perl got dumped for PHP in future incarnations of this subject).  These days frameworks like Catalyst, Template Toolkit and DBIx::Class exist to make things a lot more manageable.  My code will teach you Perl syntax, but that’s about it.  Good Perl programmers don’t mix HTML and application logic, write data to flat files or directly manipulate cookies!

I’m actually half-tempted to re-write this as a Catalyst application just to observe the difference.  I’d be much less averse to that being used as a learning example.