The number of such strings grows exponentially as you increase the desired length (which can out of hand really fast). To prevent from having to keep all of the strings in memory at once, you can use an iterator to give you just one item at a time. Even though the
glob function can be used like an iterator, it still internally keeps
all of the items in memory at once, so there is no memory gain by using glob to iterate. Here's a simple iterative solution using NestedLoops from
Algorithm::Loops:
use Algorithm::Loops 'NestedLoops';
my @chars = ( 'a' .. 'z', 1 .. 9 );
my $len = 3;
NestedLoops( [ (\@chars) x $len ],
sub {
my $str = join "", @_;
## do something with $str
} );