$iter_prod = NestedLoops([ sub { iter(qw(a b c) }, sub { iter(qw(x y z) }, ]); #### my $iter = do { my $done = 0; sub { $done++ ? undef : 1 } }; iter_prod($iter, ...) if ...; iter_prod($iter, ...) if ...; #### my @iters; push(@iters, ...) if ...; push(@iters, ...) if ...;