如何在迭代for循环中使用srand(time | $$)时避免重复?

use*_*359 1 perl for-loop srand

我在for循环中迭代perl脚本并srand(time¦$$)在我的脚本中使用随机数来播种.

在我的输出中,当我得到单独的结果时,我会得到重复的结果,如果我一次只做一个,而不是使用for循环.这是因为这srand条线吗?有什么建议?

谢谢!

Mor*_*kus 14

srand使用相同号码的呼叫将导致以下rand呼叫返回的相同序列号码.因此,如果您srand(time() | $$)快速连续(例如在同一秒内),那么您正是这样做:srand使用相同的值调用,从而生成相同的序列rand.

请参阅perldoc页面srand.

文档还提到的一件事是,如果你先打电话rand不打电话,srand那么Perl实际上会打电话srand给你.因此,您首先不需要srand在脚本中进行调用.

该文档还强烈建议不要srand每个进程多次调用,因为这会导致熵的丢失.