sub derangement { my $list = shift; my $i = @$list; my @swapped; while (--$i) { my $j = int rand ($i+1); redo if $i == $j and !$swapped[$i]; @$list[$i,$j] = @$list[$j,$i]; @swapped[$i,$j] = (1,1); } }