use strict; my %odds = ( 1 => 80, 2 => 10, 3 => 10 ); for my $i (1..25) { print "$i: ", &go, "\n"; } sub go { my $i = int(rand(100) + 1); foreach my $k (keys %odds) { $i -= $odds{$k}; return $k if $i <= 0; } return undef; }