# Randomness
# Accessing an array element at random
my @letters = ( 'a' .. 'z' ); # English ascii-bet
print $letters[ rand @letters ] for 1 .. 5; # prints 5 letters at random
How it works
rand EXPR
(opens new window) expects a scalar value, so@letters
is evaluated in scalar context- An array in scalar context returns the number of elements it contains (26 in this case)
rand 26
returns a random fractional number in the interval0 ≤ VALUE < 26
. (It can never be26
)- Array indices are always integers, so
$letters[rand @letters]
≡$letters[int rand @letters]
- Perl arrays are zero-indexed, so
$array[rand @array]
returns$array[0]
,$array[$#array]
or an element in between
(The same principle applies to hashes)
my %colors = ( red => 0xFF0000,
green => 0x00FF00,
blue => 0x0000FF,
);
print ( values %colors )[rand keys %colors];
# Generate a random integer between 0 and 9
Cast your random floating-point number as an int.
Input:
my $range = 10;
# create random integer as low as 0 and as high as 9
my $random = int(rand($range)); # max value is up to but not equal to $range
print $random . "\n";
Output:
A random integer, like...
0
See also the perldoc for rand (opens new window).
# Generate a random number between 0 and 100
Pass an upper limit as an argument to the rand() function.
Input:
my $upper_limit = 100;
my $random = rand($upper_limit);
print $random . "\n";
Output:
A random floating-point number, like...
45.8733038119139
# Remarks
Documentation for perl's rand() function: http://perldoc.perl.org/functions/rand.html (opens new window)