my $shift = rand $#array; @array = map { $array[ ($_ + $shift) % @array ]} 0..$#array; #### my $shift = rand $#array; if (@array % 2 == 0) { @array = map { $array[ ($_ + $shift) % @array} reverse 0..$#array; } else { my $middle = int(@array /2); my @middle = splice @array, $middle, 1; @array = @middle, map { $array[ ($_ + $shift) % @array} reverse 0..$#array; };