#!/usr/bin/perl use strict; use warnings; my @likelihood = (1,3,4,9); my @option = qw(foo bar baz quux); my @sum; $sum[0] = $likelihood[0]; foreach my $n ( 1 .. $#likelihood){ $sum[$n] = $sum[$n - 1] + $likelihood[$n]; } # @sum = (1, 4, 8, 17); my $n = int(rand($sum[-1])+0.1); # random number <= 17 foreach my $i ( 0 .. $#sum) { if($n <= $sum[$i]){ print $option[$i] . "\n";; last; } }