我的腳本被分成多個包。main.pl加載A.pm,加載A::B.pm和A::C.pm。他們都使用rand. srand但是,如果我為in指定種子main.pl,則后面的模塊似乎無論如何都會生成自己的種子。我怎樣才能只播種一次 RNG 并讓整個腳本可預測?
uj5u.com熱心網友回復:
在加載之前放入srand一個BEGIN塊:main.plA
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總是相同的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/464665.html
