#!/usr/bin/perl use strict; use warnings; use Benchmark qw /cmpthese/; our @array = map {sprintf "aaa:%03d" => $_} 0 .. 999; our (@a, @b); for (my $i = @array; -- $i;) { my $j = rand ($i + 1); @array [$i, $j] = @array [$j, $i]; } cmpthese -5 => { ST => '@::a = map {$_ -> [0]} sort {$a -> [1] <=> $b -> [1]} map {[$_ => substr $_, 4]} @array', Liz => '@::b = map {${$_ -> [0]}} sort {$a -> [1] <=> $b -> [1]} map {[\$_ => substr $_, 4]} @array', }; foreach my $i (0 .. 999) { die unless $a [$i] eq $b [$i]; } __END__ Benchmark: running Liz, ST for at least 5 CPU seconds... Liz: 5 wallclock secs ( 5.31 usr + 0.00 sys = 5.31 CPU) @ 102.45/s (n=544) ST: 5 wallclock secs ( 5.37 usr + 0.00 sys = 5.37 CPU) @ 105.40/s (n=566) Rate Liz ST Liz 102/s -- -3% ST 105/s 3% --