*> it generates these kinds of patterns very efficiently*
I tried

Algorithm::Combinatorics for a similar task. Both of these examples generate an array of strings n characters in length of all combinations of letters (e.g. 4 = 'aaaa'..'zzzz').
Am I doing something stupid with the module, or perl?

Perl string iteration:

`real 0m0.129s`
`
time perl -wle '
$n = shift; die "need a number" unless $n and $n =~ /^\d+$/;
$a = "a" x $n; $c = 0; $e = 26**$n;
while () { push @x, $a; $a++ and $c++; last if $c == $e }
print scalar @x' 4
`

Using Algorithm::Combinatorics:

`real 0m0.858s`
`
time perl -MAlgorithm::Combinatorics=:all -wle '
$n = shift; die "need a number" unless $n and $n =~ /^\d+$/;
@_ = ("a".."z"); $i = variations_with_repetition(\@_,$n);
while ($c = $i->next){
for (@$c) { $x .= $_ }
push @x, $x; undef $x }
print scalar @x' 4
`

Be careful with the parameter because this can make a very big array.

4 is only ~2MB but 5 is 70MB and the 6 character array is around 2000MB.

Comment onRe^2: list of four digit lock combinations without repeated digitsSelectorDownloadCode