next_permutation.pl
sub next_permutation { my $ary = shift; return unless ref($ary) eq 'ARRAY'; my $last = $#$ary or return; my $i = $last; while ($ary->[$i-1] > $ary->[$i]) { return unless $i-- > 1; } my $j = $last; while ($ary->[$i-1] > $ary->[$j]) { $j--; } @$ary[$i-1, $j] = @$ary[$j, $i-1]; @$ary[$i..$last] = reverse @$ary[$i..$last]; return 1;}