Thursday, December 13, 2007

Perl or Python?

Recently at work, we have been discussing the question of Perl versus Python for file copy, ftp, email and other daily, weekly or monthly automation / integration tasks. We considered Perl because some existing tasks had already been written in it, and Perl has a reputation as the System Admin's language of choice.

I took a task that needed automated and wrote it in Perl 5.8, then refined it using CPAN (sweet CPAN) for ArgvFile, Log4Perl, Carp, and Date::Calc. I find Perl to be very functional and completely able to meet my needs, but very quirky or perhaps unsettling. You see, I have been an object oriented programmer for a while now, and Perl's class system just feels "bolted on" to me. And I really had to jump through hoops to do a try/catch, but using eval with a return flag and an END block to test the return worked acceptably. I didn't test the exception module, as I did not discover it in time.

Next I tried Python 2.5. After a quick brush-up on the language, I was able to write about half of the task, and I moved on to the refinement. Python has exception handling, logging (based on Log4J just like Log4Perl is), fair argument parsing (I still like Perl's implementation), and lots more built in. The language is much more readable, and I find it very easy to write clean code as long as I steer clear of the crufty old-school classes. Oh yeah, we also have an experienced Python developer on staff (that can't hurt!).

I really wanted to recommend Ruby, as it is an awesome up-and-coming language with the same quick one-liner hack capabilities as Perl combined with a modern language design that makes me smile. The problem was, we want to use the same language for our admin tasks and for automated GUI testing of a system we integrate with, and it didn't have a functional Win32::GUI-Tester class. If we had a Ruby guru on staff, we may have risked it. But No, I have learned the hard way that projects fail if you throw too many unknown or untested technologies together. In my quick review, it seems that Ruby is slipping into a web-language niche. I really hope it doesn't become another PHP.

So, for us the answer was ...

Reference Links:
ActiveState Perl
ActiveState Python
Komodo Editor Python Dev Center

Labels: ,