use Algorithm::Loops qw( NestedLoop ); my $iter = NestedLoop([ map { [ $_->() ] } @subs ]); while ( my @items = $iter->() ) { ... } #### use Algorithm::Loops qw( NestedLoop ); my $iter = NestedLoop(\@subs); while ( my @items = $iter->() ) { ... }