my($tw, $winner) = (0, undef); my @numbers = ( ... ); my @freq = ( ... ); for my $idx (0..$#numbers) { $tw += $freq[ $idx ]; $winner = $idx if rand($tw) < $freq[ $idx ]; } return $winner;