#!/usr/bin/perl -w use strict; use Benchmark; # Yeah, I'm using globals; this is to get around troubles # I was having since Benchmark uses eval ... use vars qw/@array %last/; # some values to put in there : mix cases to avoid "asciibetical" sort @array=qw(xavier colin melissa wally Edward joan Arlen George mohandas ralph other); $last{other}=1; sub using_hash { defined($last{lc($a)}) cmp defined($last{lc($b)}) or lc($a) cmp lc($b); } sub using_return { return 1 if lc($a) eq 'other'; return -1 if lc($b) eq 'other'; lc($a) cmp lc($b); } sub using_eq { ( (lc($a) eq 'other') cmp (lc($b) eq 'other') ) || lc($a) cmp lc($b); } # for gosh sakes, use a sensible value here # I needed a large number on a 4 CPU system timethese (100000, {'use_hash'=> q{ my @sorted = sort using_hash @array; }, use_return=> q{ my @sorted = sort using_return @array }, use_eq=> q{ my @sorted = sort using_eq @array } } );