use Algorithm::Loops qw( NestedLoops ); my $level = 3; my @indices = NestedLoops( [ (['A'..'D']) x $level ], sub { join '', map { "${_}1" } @_ } ); foreach my $val (@indices) { print($val\n") ] #### use Algorithm::Loops qw( NestedLoops ); my $level = 3; my $iter = NestedLoops( [ (['A'..'D']) x $level ] ); while (my @values = $iter->()) { my $val = join '', map { "${_}1" } @values; print("$val\n"); }