有没有办法在Perl中存储内置的伪随机数生成器的当前状态,这样当我的程序再次运行时,它可以从它所在的位置拾取序列,而不是从一个新的序列开始?
现在,我正在存储我的位置以及初始的种子,然后把我已经看到的初始段丢弃,使用类似于
sub consume_upto_n { my ($seed,$n) = @_; $n = 1 unless defined $n and $n >= 1; srand $seed; rand for 1 .. $n - 1; return; }
例如:
srand 0x18; my @v = map { rand } 1 .. 5;
后来:
consume_upto_n(0x18,3); my @z = map { rand } 3 .. 5;
然后,$z [0] == $v [2],$z [1] == $v [3]等
解决方法
我不认为内置的兰特可以让你这样做.但是可以使用替代的rand.例如,Math::Random::MT::Auto允许您使用
serialize its objects(大概包括$MRMA :: PRNG,它是替换rand使用的对象).
我不太清楚这一点是什么.如果它是一个相当随机的序列,你怎么能告诉你是继续这个序列还是开始一个新的序列?