sub buk (@) { my @a = \( @_ ); my $n; my $i = @_; map+( $n=rand($i--), ${ $a[ $n ] }, $a[ $n ]=$a[ $i ] )[ 1 ], @_; } cmpthese -1, { map { $_ => "$_ 1..1000" } qw/naive listutil buk/ }; __END__ C:\test>junk Rate naive listutil buk naive 520/s -- -13% -32% listutil 597/s 15% -- -22% buk 769/s 48% 29% --