my $pick; my $weight; while (my ($p, $w) = each %$group) { $weight += $w; $pick = $p if rand ($weight) < $w; } # # $pick now contains a weighted choice. #