#! perl -slw use strict; use List::Util qw[ sum ]; sub Cnr{ my( $n, @r ) = shift; return [] unless $n--; for my $x ( 0 .. ($#_ - $n) ) { push @r, map{ [ $_[$x], @$_ ] } Cnr( $n, @_[ ($x + 1) .. $#_ ] ); } return @r; } our $N ||= 0; print map "@$_\n", Cnr( $N, @ARGV ) and exit if $N; print map{ "@$_\n" } Cnr( $_, @ARGV ) for 1 .. @ARGV; __END__ P:\test>cnr camel perl book camel perl book camel perl camel book perl book camel perl book