次のコードを見てください。
srand(localtime);
for (my $ik = 0; $ik < 3; $ik += 1)
{
print int(rand(10)),"\n";
sleep(1);
}
上記のコードを十分な時間(5〜10秒)間隔で複数回呼び出しますが、出力シーケンスは同じです。
すべての呼び出しにシードを設定したのでlocaltime
、異なるシードを使用する必要があり、時間のギャップのために、おそらく異なる 3 つの数字のシーケンスを生成する必要があります。何度も同じシーケンスを取得するのはなぜですか。
注: コードはループ内ではなく、複数回実行される Perl ファイル内にあります。
ドキュメントによると、複数のインスタンスが同じ「秒」で実行されて同じシードにつながると、このシードは失敗しますが、ここではそうではありません。
編集:: @simbabqueによる解決策は役立ちますが、期待されるランダム性は得られません。以下の前述のソリューションに関する私のコメントを見てください。