7 my @perm = ( 0 .. $#list );
9 for my $idx (0 .. $#list) {
10 my $move = $list[$idx];
12 $pos++ while $perm[$pos] != $idx;
13 splice(@perm, $pos, 1);
14 my $dst = ($pos + $move) % @perm;
15 splice(@perm, $dst, 0, $idx);
18 my @ordered = map { $list[$perm[$_]] } 0 .. $#list;
21 $i++ while $ordered[$i] != 0;