use Data::Dumper; use Algorithm::Loops 'NestedLoops'; my $depth = 6; my $range = 40; NestedLoops( [[1..$range], ( sub { [$_+1..$range] } ) x ($depth-1)], sub { print Dumper \@_})