in reply to loop in loop method evasion
The trouble is that your task is enormous. You want to generate 36^15 strings. That is well over 2E+23 strings that will require in excess of 1,000,000 exabytes.
Forget the appearance of your code. You have problems if you want this to finish running this year or if you want to save these strings.
Another approach to this is to recognize that your sequence of strings can form a one-to-one map with a sequence of integers.
The advantage of this method is that it uses no memory.
# XXX Doesn't handle negatives
sub idiv {
my ($dividend, $divisor) = @_;
use integer;
my $quotient = $dividend / $divisor;
my $remainder = $dividend - ( $quotient * $divisor );
return ( $quotient, $remainder );
}
my @chartab = (0..9, 'a'..'z');
my $N = 3;
for (0 .. @chartab**$N-1) {
my $x = $_;
for (1..$N) {
($x, my $i) = idiv($x, 0+@chartab);
print $chartab[$i];
}.