Random Perl Content

Randy J. Ray rjray at blackperl.com
Sat May 18 21:53:33 BST 2013

(It's a pun, see, because I'm going to be asking about random number 
generators... get it? Get it...?)

(Short, TL;DR summary: I'm looking for a pRNG that can have multiple 
instances at once that don't affect each others' stream of numbers. Does 
Math::Random::MT meet that criteria?)

I considered posing this to Perlmonks, but I just don't frequent that 
site like I used to. And there are enough Large Perl Brains on this list 
that I should get as good an answer, if not better.

I am looking for a pRNG (pseudo-Random Number Generator) module. But I 
have an unusual requirement-- I need to be able to instantiate multiple 
*independent* generators, that can take seeds for the sake of 
reproducible results. Let me explain...

My current (paying) job is writing frameworks for automated QA of my 
company's software (mainly the operating system that runs our storage 
servers). We are working on a new approach to how we structure some of 
our tests, and that happens to involve the potential of using some 
randomization to select different paths over a directed graph. But, this 
being QA-oriented, even if something runs with a degree of randomness to 
it, it needs to be reproducible at a later time. So, no problem, just 
create a seed for srand() and log that seed, and also provide users a 
way to specify a seed at the start. Then you can just re-use the seed 
and reproduce your results. Right? Well, not exactly...

Other libraries I use, developed by other teams within our company, 
might also have some randomization in them (like generating random names 
for disk volumes, randomizing data generation for traffic testing, 
etc.). Not to mention that we use no small number of CPAN modules, some 
of which might use rand() as well. I could seed Perl's RNG with a 
specific seed, but if that run has to try twice to generate a unique 
file name, instead of one or thrice, that will affect the random numbers 
*my* code gets.

So my thought was that sure there's a RNG module out there that is OO, 
and encapsulates the seed and all other internal elements of the 
generation process. One that I can instantiate multiple instances of, 
and have them generate streams of random numbers that are independent of 
each other. The closest I've found is Math::Random::MT, which implements 
the Mersenne Twister pRNG. But I can't immediately tell from the docs 
whether the object instances it creates are truly independent of each 
other or not.

So, is this something anyone else here has dealt with? Are there modules 
I just haven't stumbled upon yet, that would do this for me? Any help 
greatly appreciated, as always.

Randy J. Ray      Sunnyvale, CA      http://www.rjray.org 
rjray at blackperl.com
Silicon Valley Scale Modelers: http://www.svsm.org

More information about the london.pm mailing list