sub genFixedSubsets { my( $size, @set )= @_; my @idx= reverse 0..$size-1; return sub { return if $size < @idx; my @ret= @set[@idx]; my $i= 0; $i++ until ++$idx[$i] < @set-$i || $size < $i; $idx[$i]= 1+$idx[1+$i] while 0 <= --$i; return @ret; }; } my $gen= genFixedSubsets( $ARGV[0] || 3, 1..($ARGV[1]||5) ); my @subset; while( @subset= $gen->() ) { print "@subset\n"; }