sub perms { my @arr = @_; my $m = @arr; my $n = 0; { print "@arr\n"; ++$n; my ( $i, $d ) = offsets( $n ); last if $i > @arr; my $j = @arr - $i; @arr[ $j+1..$#arr ] = reverse @arr[ $j+1..$#arr ]; @arr[ $j, $j+$d ] = @arr[ $j+$d, $j ]; redo; } }