2009/10/25 Michael Alipio <[email protected]>:
> Hi,
>
> I'm trying to write a word list generator which can
> generate all possible combinations of n characters, within n
> set of characters.
>
>
> So far, this is what I have come up. The only input is the
> lenght of the password the user wants.
>
> my @set = qw(a b c d e f g h i j k l m n o p q r s t u v w
> x y z);
> my $len = scalar @set;
> my $char1;
> my $char2;
> my $char3;
> my $char4;
> my $char5;
> my $char6;
> my $char7;
> my $char8;
>
> if ($pwlen == 8){
>
> for ($char1=0;$char1<$len;$char1++){
> for ($char2=0;$char2<$len;$char2++){
> for ($char3=0;$char3<$len;$char3++){
>
> ... upto
>
> for ($char8=0;$char8<$len;$char8++){
>
> print
> "$set[$char1]$set[$char2]$set[$char3]$set[$char4]$set[$char5]$set[$char6]set[$char7]$set[$char8]\n";
>
> }}}}}}}}
>
> } elseif ( $pwlen == 7){
>
> for ($char2=0;$char2<$len;$char1++){
> for ($char3=0;$char3<$len;$char2++){
> for ($char4=0;$char4<$len;$char3++){
>
> ... upto
>
> for ($char8=0;$char8<$len;$char8++){
>
> print
> "$set[$char2]$set[$char3]$set[$char4]$set[$char5]$set[$char6]$set[$char7]set[$char8]\n";
>
> }}}}}}}
>
> }
>
>
> The problem with the code above is that the length of words
> is hard coded. Only 8 maximum. I'm looking for ways on how
> to make my code flexible (length can be whatever the user
> wants ).
>
> My code is limited to 8 chars maximum length plus if I want
> to increase it, I have to add another set of for loops plus
> another variable to use, e.g., $char9, char10.. and so
> on...
>
>
> Any idea?
What about keeping the characters in an array @char
so you will have
$char[0], $char[1] etc. a
nd the loops could be replaced by a recursive function call. Something
like this:
do_something_for_char($k)
sub do_something_for_char {
my ($k) = @_;
return if $k >= $n;
do_something_for_char($n+1);
}
Gabor
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/