P:\test>Perl -v
This is perl, v5.8.7 built for MSWin32-x86-multi-thread
(with 7 registered patches, see perl -V for more detail)
...
P:\test>Perl -V:randbits
randbits='15';
####
#! perl -slw
use strict;
my %cache;
$cache{ sprintf("%0.8x",rand()*0xffffffff) } = undef for 1 .. 1_000_000;
printf "1 million attempts produced %d keys\n", scalar keys %cache;
printf "between %s and %s\n", (sort keys %cache)[ 0, -1 ];
__END__
P:\test>junk
1 million attempts produced 32768 keys
between 00000000 and fffdffff
####
#! perl -slw
use strict;
my %cache;
my $u = sprintf("%0.8x",rand()*0xffffffff);
until( exists $cache{ $u } ) {
$cache{ $u } = undef;
$u = sprintf("%0.8x",rand()*0xffffffff);
}
printf "Produced %d unique keys before duplicating\n", scalar keys %cache;
printf "between %s and %s\n", (sort keys %cache)[ 0, -1 ];
__END__
P:\test>junk
Produced 454 unique keys before duplicating
between 00bdffff and ff89ffff
P:\test>junk
Produced 273 unique keys before duplicating
between 013dffff and feb5ffff
P:\test>junk
Produced 84 unique keys before duplicating
between 0183ffff and fe5bffff
P:\test>junk
Produced 94 unique keys before duplicating
between 001bffff and fbc1ffff
####
#! perl -slw
use strict;
my %cache;
$cache{ sprintf( "%0.8x", rand() * rand() * 0xffffffff ) } = undef for 1 .. 1_000_000;
printf "1 million attempts produced %d keys\n", scalar keys %cache;
printf "between %s and %s\n", (sort keys %cache)[ 0, -1 ];
__END__
P:\test>junk
1 million attempts produced 994758 keys
between 00000000 and ffae0137
####
Produced 17891 unique keys before duplicating
between 00000000 and fba0116f
P:\test>junk
Produced 1957 unique keys before duplicating
between 0008e633 and fb575407
P:\test>junk
Produced 30229 unique keys before duplicating
between 00000000 and fdeaed07
P:\test>junk
Produced 10830 unique keys before duplicating
between 0000eedf and ff441eff
P:\test>junk
Produced 15537 unique keys before duplicating
between 00000000 and fe068a77