use warnings; use sort '_qsort'; use Benchmark qw(timethese); my @x; my $max = 40000; $x[$_] = int rand(2e5) foreach (0..$max); my @w = 1..$max; my @z = reverse 1..$max; sub sort_random { my @v = sort {$a <=> $b} (@x); } sub sort_sorted { my @v = sort {$a <=> $b} (@w); } sub sort_reversed { my @v = sort {$a <=> $b} (@z); } timethese (800, { 'random' => \&sort_random, 'sorted' => \&sort_sorted, 'reverse' => \&sort_reversed, } ); #### $ perl bench_sort2.pl Benchmark: timing 800 iterations of random, reverse, sorted... random: 14 wallclock secs (14.48 usr + 0.00 sys = 14.48 CPU) @ 55.26/s (n=800) reverse: 14 wallclock secs (13.57 usr + 0.00 sys = 13.57 CPU) @ 58.94/s (n=800) sorted: 14 wallclock secs (13.57 usr + 0.00 sys = 13.57 CPU) @ 58.94/s (n=800) #### $ perl bench_sort2.pl Benchmark: timing 800 iterations of random, reverse, sorted... random: 11 wallclock secs (11.31 usr + 0.00 sys = 11.31 CPU) @ 70.73/s (n=800) reverse: 2 wallclock secs ( 1.98 usr + 0.00 sys = 1.98 CPU) @ 403.84/s (n=800) sorted: 2 wallclock secs ( 1.94 usr + 0.00 sys = 1.94 CPU) @ 413.44/s (n=800)