このサブルーチンは、A から長さ N のアルファベットの M 番目の文字までの文字を使用して、文字の文字列の組み合わせを生成します。
sub genString
{
my($m,$n,$str,$letter,$temp,$i) = @_;
if($n == 0){
$letter = chr(ord("A")+($i+=1));
if($temp == 1){ print "$str\n"; }
else{
for($j = 0 ; $j < temp-1 ; $j++){
if(ord(substr($str,$j,1)) < ord(substr($str,$j+1,1))){$do_print = 1;}
else{
$do_print = 0;
break;
}
}
if($do_print == 1){ print "$str\n"; }
}
}
else{
for($j = ord($letter) ; $j < ord($letter)+$m ; $j++){
genString($m,$n-1,$str.chr($j),$letter,$temp,$i);
}
}
}
&genString($m,$n,$str,"A",$n,0);
例: 入力: M=4; N=3; 出力: ABC ABD ACD BCD
Ruby でこれと同様のことを試してみましたが、動作しますが、Perl では無限ループになり、その理由がわかりません。私はここ Perl の初心者です。私は何をすべきか?(私のコードがちょっと長い場合は申し訳ありません)