>perl -le "print '123' <=> 'abc'" 1 >perl -le "print '123' cmp 'abc'" -1 #### my $orderby = 'age'; my $numerical = 1; my $direction = 'ASC'; my $sorter; if ($direction eq 'ASC') { if ($numerical) { $sorter = sub { $hash{$a}{$orderby} <=> $hash{$b}{$orderby} }; } else { $sorter = sub { $hash{$a}{$orderby} cmp $hash{$b}{$orderby} }; } } else { if ($numerical) { $sorter = sub { $hash{$b}{$orderby} <=> $hash{$a}{$orderby} }; } else { $sorter = sub { $hash{$b}{$orderby} cmp $hash{$a}{$orderby} }; } } @sorted = sort { &$sorter } keys %hash;