$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 ...;