Just a quick editorial comment on $a and $b. Since so many of Perl's internal variables are indicated by Funny Characters(TM), having plain old letters for the sort variables may not quite sink in right away. It hasn't bit me in any of my own code (my problem is one of excessively verbose names rather than overly terse), but I can see how it might confuse somebody who is looking for special variables with names like $_ or $!.
Now that I think about it... I've never had any problems remembering about the regex variables $1, $2, etcetera. The context makes it quite clear what purpose they serve. Guess I just have to remember that, like so many things in Perl, $a and $b are just a question of context.
"All you need is ignorance and confidence; then success is sure."-- Mark Twain