in reply to perl rand() function

I was playing around with rand() last night and wanted rand() to select a random number from a range. After much brain racking and some help from learning perl, I came up with this:

#!/usr/bin/perl -w use strict; srand; # produce n random numbers my $lowest_number=1; my $highest_number=49; my @number_range=($lowest_number...$highest_number); my @lottery_numbers=(1...6); my $a = 1; do { # A random element from @number_range is selected and # placed in to @X # $lottery_numbers[$a] = $number_range[rand $highest_number]; $a ++; } until $a > 6; print "@lottery_numbers[1...6]\n";

While this may not be of use to the original poster, I hope it will be useful to some monk in the future. :)

Yet another perl newbie.

Replies are listed 'Best First'.
Re: Re: perl rand() function
by YuckFoo (Abbot) on Apr 16, 2002 at 21:52 UTC
    func,

    This isn't gonna work. If I want random from 50 - 100, you code puts 50 to 100 in an array then chooses random indexes from 0 - 99. But there are only 51 items in the array. To fix this change your rand parameter from $highest_number to @number_range.

    Here's another way:

    YuckFoo

    #!/usr/bin/perl use strict; my ($beg, $end) = qw(10 20); my $range = ($end - $beg) + 1; for (1..6) { print int(rand($range) + $beg) . "\n"; }

      Thanks. I never knew rand() could have an array as an expression. Also, I'll have to do more testing before I post my code. :)

Re: Re: perl rand() function
by hossman (Prior) on Apr 17, 2002 at 00:14 UTC
    my @number_range=($lowest_number...$highest_number);

    a side note: what you've got there is terribly inefficient. You are constructing an array of size ($highest_number - $lowest_number) which is going to be pretty painful if your range is 0 to 100,000,000.