for my $i (1..$depth-1) { my $val = 1 + 2*$i; push @$loop, sub {[$_+1..$val]}; } #### my $val= 3; for my $i ( 1 .. $depth-1 ) { my $end= $val; push @$loop, sub {[$_+1..$end]}; $val += 2; } #### #!/usr/bin/perl -w use strict; use Algorithm::Loops 'NestedLoops'; my $depth= 4; my $iter= NestedLoops( [ [0..1], map { my $end= 2*$_+1; sub { [$_+1..$end] } } 1..$depth-1, ], ); while( my @list= $iter->() ) { output(@list); } sub output { print join '', @_, "\n"; }