If you want a nice numeric permutation iterator-making closure (as I did), here's how I'd write it (based completely on the above node).
sub make_orderings
{
my $num = shift;
my @arr = (1 .. $num);
return sub {
my $last = $#arr;
my $i = $last - 1;
$i-- while 0 <= $i && $arr[$i] >= $arr[$i+1];
return if $i == -1;
@arr[$i+1..$last] = reverse @arr[$i+1..$last]
if $arr[$i+1] > $arr[$last];
my $j=$i+1;
$j++ while $arr[$i] >= $arr[$j];
@arr[$i,$j] = @arr[$j,$i];
return @arr;
}
}
------
We are the carpenters and bricklayers of the Information Age.
Don't go borrowing trouble. For programmers, this means Worry only about what you need to implement.