@A_options = @B_options = @C_options = qw(0 1 2 3 4 5 6 7 8 9); foreach my $A (@A_options) { foreach my $B (@B_options) { foreach my $C (@C_options) { print $A . $B . $C . ;\n"; } } } #### @A_options = @B_options = @C_options = qw(0 1 2 3 4 5 6 7 8 9); NestedLoops( [\@A_options,\@B_options,\@C_options], sub {print $_[0] . $_[1] . $_[2] . "\n";} );