Another approach to this is to recognize that your sequence of strings can form a onetoone 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**$N1) {
my $x = $_;
for (1..$N) {
($x, my $i) = idiv($x, 0+@chartab);
print $chartab[$i];
}
print ',';
}
