Perl random integer FAQ: Can you provide a Perl random integer example?
In my earlier Perl random tutorial, I described several different ways of generating random numbers in Perl. Today I'd like to share a Perl script I wrote that uses a random integer number to rotate files on this website.
A Perl random integer script example
The following Perl script performs the following functions:
- Determines how many files are in a given directory.
- Gets a random integer that is one less than the number of files.
- Copies the file in the Perl array that corresponds to the random number that was generated.
That description isn't great, so let me give you an example:
- This Perl script runs, and find that there are 20 "*.txt" files in the directory.
- The number 20 is assigned to the
$num_files
variable. - The variable
$rand
will hold a number that is anywhere between 0 and 19. For our example, let's say it is number 12. - The
copy
function below will get element number 12 from the@files
array, and then copy the file given by that name to the filenamead-block.html
.
I run this Perl random integer script from my Linux crontab file periodically. This script is currently responsible for rotating the Amazon and ThinkGeek ads shown on this website.
My Perl random integer file-rotation script
Without any further delay, here is the source code for my Perl random file rotation script:
#!/usr/bin/perl # a perl random script. # randomly rotate ad files. # created by alvin alexander, devdaily.com use strict; use warnings; use File::Copy; my $ad_file = 'ad-block.html'; # get a list of all *.txt files in the current directory opendir(DIR, "."); my @files = grep(/\.txt$/,readdir(DIR)); closedir(DIR); # get the number of files in the directory my $num_files = @files; # get a random number that is less than the number of files # in the current directory (note: 5 files results in a range of 0-4) my $rand = int(rand($num_files)); # copy the random file to the actual ad file copy($files[$rand], $ad_file);
Perl random integer - Discussion
As you can see, generating a random number in Perl is very simple. Just use the Perl rand function, wrap it in the Perl int function, and specify an upper limit. As you can see from this example, a simple Perl random integer function like this can also be extremely useful.