I know it "shouldn't" make a difference, but we all know that things that
shouldn't, do.  I wasn't seeding it explicitly, was letting perl handle it.
Unless it's a bug, my theory is that mod_perl is keeping the old seed from
the last compile.  Mod_perl does not recompile or even reinitialize the
script between calls.  I've used this effect to maintain data within the cgi
script.

The code is trvial.
my $fn = substr rand(), 2;
my $x = 0;
while (-e "$tempdir\\$fn.bat") {
        print "<!-- batch file $tempdir\\$fn.bat already exists -->\n";
        $fn = substr rand(), 2;
        print "cannot find unique temp bat file" and die "cannot find unique
        temp bat file" if $x > 10;
        $x++;
}

The change I made was to put srand() above rand().  It's build 811.  But
really, that's all beside the point.  The core problem is rand() repeating
it's output.

Just for fun I did a little test.
for (1 .. 10000) {
        my $fn = rand();
        ++$dup and next if exists $num{$fn};
        $num{$fn} = 1;
}
print scalar keys %num, " unique numbers. $dup duplicates produced\n";
#########
8623 unique numbers. 1377 duplicates produced

That's really interesting.  So rand() is pretty useless.


At 10:00 PM 11/29/2005 -0600, John Garvin wrote:
>perldoc -f srand says srand() is called implicitly the first time
>rand() is called, so your change shouldn't make a difference.
>
>How were you seeding rand() before?
>
>Got any code to show us?




--
REMEMBER THE WORLD TRADE CENTER         ---=< WTC 911 >=--
"...ne cede malis"

00000100

_______________________________________________
Perl-Win32-Users mailing list
[email protected]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to