srand
srand EXPR
srandThis function sets the random number seed for the rand operator. If
EXPR is omitted, it uses a semirandom value
supplied by the kernel (if it supports the /dev/urandom device) or based on the current
time and process ID, among other things. In either case, starting with
v5.14, it returns the seed. It’s usually not necessary to call srand at all, because if it is not called
explicitly, it is called implicitly at the first use of the rand operator. However, this was not true in
versions of Perl before v5.004 (1997), so if your script needs to run
under older Perl versions, it should call srand.
Frequently called programs (like CGI scripts) that simply use
time ^ $$ for a seed can fall prey to
the mathematical property that a^b ==
(a+1)^(b+1) one-third of the time. So don’t do that. Use this
instead:
srand( time() ^ ($$ + ($$ << 15)) );
You’ll need something much more random than the default seed for cryptographic purposes. On some systems, the /dev/random device is suitable. Otherwise, checksumming the compressed output of one or more rapidly changing operating system status programs is the usual method. For example:
srand (time ^ $$ ^ unpack "%32L*", `ps wwaxl | gzip`);
If you’re particularly concerned with this, see the Math::TrulyRandom module in CPAN.
Do not call srand multiple times in your program unless
you know exactly what you’re doing and why you’re doing it. The point of
the function is to “seed” the rand
function so that rand can produce a different sequence ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access