我的脚本被分成多个包。 main.pl
加载A.pm
,它加载A::B.pm
和A::C.pm
。他们都使用rand
。但是,如果我在 main.pl
中为 srand
指定一个种子,后面的模块似乎无论如何都会生成它们自己的种子。我如何才能仅对 RNG 进行一次播种并使整个脚本可预测?
最佳答案
在加载A
之前,将srand
放入main.pl
的BEGIN
block 中:
use strict;
use warnings;
...
BEGIN { srand(7) }
use A;
...
一个完整的例子:
A.pm
:
package A;
use B;
use C;
CORE::say "A: ", rand();
B.pm
:
package B;
CORE::say "B: ", rand();
C.pm
:
package C;
CORE::say "C: ", rand();
main.pl
:
BEGIN { srand(7) }
use A;
CORE::say "main: ", rand();
运行 perl -I 。 main.pl
总是打印:
B: 0.266444196765409
C: 0.682035230190621
A: 0.265490593427
main: 0.129110848853948
如果我将 srand(7)
放在 use A
之后,那么前三个打印(来自 A
,B
和 C
) 是随机数,只有 main.pl
中的那个总是相同的。
关于perl - 加载 perl 模块时只调用一次 srand,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71794658/