use strict; use warnings; use Benchmark q{cmpthese}; my %hash = map { $_ => { Size => int rand 10000 } } q{aaa} .. q{dzz}; my $rcJethro = sub { my @unsort = map qq{$hash{ $_ }->{ Size }:$_}, keys %hash; my @sort = do { no warnings q{numeric}; sort { $a <=> $b } @unsort; }; foreach ( @sort ) { s{[^:]*:}{}; } }; my $rcSimple = sub { my @sortedKeys = sort { $hash{ $a }->{ Size } <=> $hash{ $b }->{ Size } } keys %hash; }; my $rcClassicST = sub { my @sortedKeys = map { $_->[ 0 ] } sort { $a->[ 1 ] <=> $b->[ 1 ] } map { [ $_, $hash{ $_ }->{ Size } ] } keys %hash; }; my $rcClassicGRT = sub { my @sortedKeys = map { substr $_, 4 } sort map { pack q{NA*}, $hash{ $_ }->{ Size }, $_ } keys %hash; }; cmpthese( -5, { ClassicGRT => $rcClassicGRT, ClassicST => $rcClassicST, Jethro => $rcJethro, Simple => $rcSimple } );