怎麼做到bruteforce 的效果?

怎麼做到bruteforce 的效果?

怎麼做到bruteforce 的效果?
意思是說..
排了1個array
@dic[0..26]='A'..'Z';
@dic[27..52]='a'..'z';
@dic[53..63]=0..9;

之後
$l=0;
while($l<100){
print $dic[$l];
$l++;
}

出了 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
就停了...因為$dic[64]不存在.....
那怎麼可以叫他繼續排下去......
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789....
AAABACADAEAFAGAHAIAJAKALAMAN..........................................90919293949596979899
這樣呢.....><
双循环
拿$|做甚
但如果長度是未定呢..
會做到... AAAA............ZZZZ  這樣
递归
要怎寫呢><
my @dict = ('A'..'E');
GenDict(\@dict, 1, 3, 5, '');

sub GenDict {
    my ($list, $pos_begin, $pos_end, $width, $base_str) = @_;
    
    if (0 == $width) {
        print "$base_str\n";
        return;
    }
   
    for ($pos_begin .. $pos_end) {
        GenDict($list, $pos_begin, $pos_end, $width - 1, $base_str . $list->[$_]);
    }
}


要全在一行的话就去掉\n


QUOTE:
原帖由 windhamwong 于 2008-2-11 21:54 发表
但如果長度是未定呢..
會做到... AAAA............ZZZZ  這樣

@d=('A'..'Z','a'..'z',0..9);
$n=3;
map {eval join"",((map{"for(\$t[$_]=0;\$t[$_]<scalar \@d;\$t[$_]++){"}(0..$_-1)),"push \@r,\"",join("",(map{"\$d[\$t[$_]]"}(0..$_-1))),"\"",(map{"}"}(0..$_-1)));}(1..$n);
print join "\n",@r;


另外,A-Z是0-25
感謝 Lonki  的方法^^
正在研究..
orangetouch  的 好像有點複雜
但也感謝^^