# A list of weights; initialized for your problem my @weights = (8, 1, 1); # Count the total of all the counts my $sum; map { $sum += $_; } @weights; # Choose a random number, then find a weighted random result my $target = rand($sum); for (1..@weights) { $target -= $weights[$_]; last if $target <= 0; } print "The number is $_\n";