In principle, you ought to be able to do
#!/usr/bin/env perl
use strict; use warnings;
for (1 .. 10) {
printf "%08X\n", rand(0xffffffff);
}
However, you may find out that —at least on some systems with some perl
s (if not all)— the range of rand
is restricted to 32,768 values.
You can also study the source code of String::Random to learn how to generate random strings satisfying other conditions.
However, my caution against using the built in rand
on Windows system still stands. See Math::Random::MT for a high quality RNG.
#!/usr/bin/env perl
use strict; use warnings;
my @set = ('0' ..'9', 'A' .. 'F');
my $str = join '' => map $set[rand @set], 1 .. 8;
print "$str\n";
PS: The issue with Perl's rand on Windows was fixed in 5.20:
This meant that the quality of perl's random numbers would vary from platform to platform, from the 15 bits of rand() on Windows to 48-bits on POSIX platforms such as Linux with drand48().
Perl now uses its own internal drand48() implementation on all platforms. This does not make perl's rand cryptographically secure. [perl #115928]
perl -e'print[0..9,A..F]->[rand 16]for 1..8'
– Grampsppm inst dmake
,ppm inst mingw
). I prefercpanm
for installing modules directly from cpan (ppm inst App::cpanminus
). – Colville