これは SO に関する私の最初の質問です。ばかげている場合は申し訳ありませんが、最近、製品コードで見つけたときに本当に困惑しました。私は自分の問題を 2 つのコード ブロックに要約しました。これは、同じことを行うこと、つまり反復ごとに乱数を生成することを期待していました。
for my $num (0 .. 5) {
my $id = int rand 10;
print "$id\n";
}
と
for (0 .. 5) {
my $tmp;
my $id = $tmp if $tmp;
$id = int rand 10 unless $id;
print "$id\n";
}
最初のものは私が期待することをしますが、2番目のものは何回繰り返しても同じ数を与えます。$tmp
この簡略化では常に定義されていないため、= $tmp if $tmp
除外すると期待どおりの結果が得られるため、動作を示すだけです。
なぜこれが起こるのかについての洞察をいただければ幸いです。