my $depth = 4; my $loop = [[0..1]]; my $val = 3; for my $i (1..$depth-1) { push @$loop, sub {[$_+1..$val]}; $val+=2; } my $iter = NestedLoops($loop); while (my @list = $iter->()) { output(@list); } sub output { my @args = @_; print join '', @args, "\n"; }