gpt4 book ai didi

perl - 加载 perl 模块时只调用一次 srand

转载 作者:行者123 更新时间:2023-12-05 03:26:12 26 4
gpt4 key购买 nike

我的脚本被分成多个包。 main.pl加载A.pm,它加载A::B.pmA::C.pm。他们都使用rand。但是,如果我在 main.pl 中为 srand 指定一个种子,后面的模块似乎无论如何都会生成它们自己的种子。我如何才能仅对 RNG 进行一次播种并使整个脚本可预测?

最佳答案

在加载A 之前,将srand 放入main.plBEGIN 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 之后,那么前三个打印(来自 ABC) 是随机数,只有 main.pl 中的那个总是相同的。

关于perl - 加载 perl 模块时只调用一次 srand,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71794658/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com