summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJarkko Hietaniemi <jhi@iki.fi>2001-09-04 13:05:23 +0000
committerJarkko Hietaniemi <jhi@iki.fi>2001-09-04 13:05:23 +0000
commite0b236fe86fb5fced9182a324010842ee938ca4c (patch)
tree2b4c0ba243f4dea17385f78a8b8d691cbbac1fc1
parent9bbb1adaf4f03189507dea28ff5773b762523248 (diff)
downloadperl-e0b236fe86fb5fced9182a324010842ee938ca4c.tar.gz
More srand entry tweakage based on Randal's suggestion.
p4raw-id: //depot/perl@11862
-rw-r--r--pod/perlfunc.pod52
1 files changed, 19 insertions, 33 deletions
diff --git a/pod/perlfunc.pod b/pod/perlfunc.pod
index ed144d1b4e..50a02fef12 100644
--- a/pod/perlfunc.pod
+++ b/pod/perlfunc.pod
@@ -4797,49 +4797,35 @@ loaded the standard Math::Complex module.
Sets the random number seed for the C<rand> operator.
-It's usually not necessary to call C<srand> at all, because if it is
-not called explicitly, it is called implicitly at the first use of the
-C<rand> operator. However, this was not the case in versions of Perl
-before 5.004, so if your script will run under older Perl versions, it
-should call C<srand>.
-
The point of the function is to "seed" the C<rand> function so that
C<rand> can produce a different sequence each time you run your
-program. Just do it B<once> at the top of your program, or you
-I<won't> get random numbers out of C<rand>.
+program.
-If EXPR is omitted, uses a semi-random value supplied by the kernel
-(if it supports the F</dev/urandom> device) or based on the current
-time and process ID, among other things.
+If srand() is not called explicitly, it is called implicitly at the
+first use of the C<rand> operator. However, this was not the case in
+versions of Perl before 5.004, so if your script will run under older
+Perl versions, it should call C<srand>.
-Most implementations of C<srand> take an integer and will silently
-truncate decimal numbers. This means C<srand(42)> will usually
-produce the same results as C<srand(42.1)>. To be safe, always pass
-C<srand> an integer.
+Most programs won't even call srand() at all, except those that
+need a cryptographically-strong starting point rather than the
+generally acceptable default, which is based on time of day,
+process ID, and memory allocation, or the F</dev/urandom> device,
+if available.
-Calling C<srand> multiple times is highly suspect.
-
-=over 4
-
-=item *
+You can call srand($seed) with the same $seed to reproduce the
+I<same> sequence from rand(), but this is usually reserved for
+generating predictable results for testing or debugging.
+Otherwise, don't call srand() more than once in your program.
Do B<not> call srand() (i.e. without an argument) more than once in
a script. The internal state of the random number generator should
contain more entropy than can be provided by any seed, so calling
-srand() again actually I<loses> randomness. And you shouldn't use
-srand() at all unless you need backward compatibility with Perls older
-than 5.004.
+srand() again actually I<loses> randomness.
-=item *
-
-Do B<not> call srand($seed) (i.e. with an argument) multiple times in
-a script for any other purpose than calling it with the I<same>
-argument to produce the I<same> sequence out of rand() I<unless> you
-know exactly what you're doing and why you're doing it. Usually doing
-anything else than reusing the same seed requires intimate knowledge of
-the implementation of srand() and rand() on your platform.
-
-=back
+Most implementations of C<srand> take an integer and will silently
+truncate decimal numbers. This means C<srand(42)> will usually
+produce the same results as C<srand(42.1)>. To be safe, always pass
+C<srand> an integer.
In versions of Perl prior to 5.004 the default seed was just the
current C<time>. This isn't a particularly good seed, so many old