use Math::Random::MT qw(srand rand); sub seed_prng { # Seed the pseudo random number generator with a random or specified seed # Returns what seed value is used my ($seed) = shift; if (not defined $seed) { # Want to produce an random unsigned 32-bit integer to feed to # Math::Random::MT::srand(). That means, first seed srand() with a temporary # seed that varies quickly in time so we don't get twice the same seed if we # request several seeds in a short interval of time. my $tmp_seed = time ^ ($$ + ($$ << 15)); # shown in srand's doc srand($tmp_seed); my $max = int(2**32-1); # Largest unsigned 32-bit integer $seed = int(rand($max+1)); # An integer between 0 and $max } srand($seed); return $seed; }