use Sort::Key::Top 'natpos'; use Benchmark qw(cmpthese); my @f = map rand, 0..1e7; my ($r1, $r2); cmpthese -1, { sort => sub { $r1 = (sort { $a <=> $b } @f)[@f/2] }, skt => sub { $r2 = natpos @f/2, @f } }; print "median $r1, $r2\n"; #### $ perl /tmp/median.pl s/iter sort skt sort 20.5 -- -94% skt 1.25 1542% -- mediam 0.499785519518444, 0.499785519518444