my @d = ; my @e; my @key = map { (split /\|/)[4] } @d; use Benchmark qw/cmpthese/; cmpthese (4e4, { grt => sub { @e = map { substr $_, 6 } sort map { my $val = (split /\|/)[4]; sprintf "%06d$_",$val} @d; }, raw => sub { @e = sort { (split '\|', $a, 12)[4] <=> (split '\|', $b, 12)[4] } @d; }, ambrus => sub { @e = @d[ sort { $key[$a] <=> $key[$b] } 0 .. @d - 1 ]; }, });