while( defined( my $item = $iter1->() ) { print "1: $item\n"; } while( defined( my $item = $iter2->() ) { print "2: $item\n"; } while( defined( my $item = $iter2->() ) { print "3: $item\n"; } #outputs: 1: 1 1: 2 1: 3 2: y 2: n 3: 7 3: 14 3: 21 3: 28 #### $nl_iter = NestedLoops( \@Loops ); # some fancy magic for \@Loops while( my @items = $nl_iter->() ) { print join ", " @items; print "\n"; } #outputs: 1, y, 7 1, y, 14 1, y, 21 1, y, 28 1, n, 7 1, n, 14 ... 3, n, 21 3, n, 28