my $n = shift; sub plustwo_iter { my $val = 1; return sub { $val +=2; return $val; } } my $p = plustwo_iter(); my $loop = [[0..1], (sub {[$_+1..&$p]}) x ($n-2)]; my $iter = NestedLoops($loop); while (my @list = $iter->()) { output(@list); }