sub roll_dice { my ($low_end, $range, $dice) = @_; my $sidesneeded = $range + $dice - 1; my $r = 0; for (0..$dice-1) { my $sides = int($sidesneeded / ($dice-$_)); $sidesneeded -= $sides; $r += int(rand $sides); } $low_end + $r; }