Я понимаю, что вы просто возитесь с рекурсией. Но пока вам весело сравнивать реализации между двумя языками, вы также можете увидеть, как CPAN может расширить ваш набор инструментов.
Если вы не заботитесь о заказе, вы можете сгенерировать все 13 388 280 перестановок ( 'a'..'z', 'A..'Z', '0'..'9' )
, взятых по четыре за один раз с модулем CPAN, Algorithm :: Permute
Вот пример того, как может выглядеть этот код.
use strict;
use warnings;
use Algorithm::Permute;
my $p = Algorithm::Permute->new(
[ 'a' .. 'z', 'A' .. 'Z', '0' .. '9' ], # Set of...
4 # <---- at a time.
);
while ( my @res = $p->next ) {
print @res, "\n";
}
Метод new()
принимает массив ref, который перечисляет набор символов или список того, что нужно переставить. Второй аргумент - сколько за раз включить в перестановку. Таким образом, вы берете 62 вещи по 4 за раз. Затем используйте метод next()
для итерации перестановок. Остальное - просто оформление витрин.
То же самое можно сократить до следующей строки Perl:
perl -MAlgorithm::Permute -e '$p=Algorithm::Permute->new(["a".."z","A".."Z",0..9],4);print @r, "\n" while @r=$p->next;'
Существует также раздел о перестановке, а также дополнительные примеры в perlfaq4 . Он включает в себя несколько примеров и перечисляет некоторые дополнительные модули, которые обрабатывают детали для вас. Одной из сильных сторон Perl является размер и полнота Сети архивов Perl (CPAN).