sub roll_die { my ($sides, $min) = @_; return int(rand($sides - $min + 1) + $min); } sub my_roller { my ($num_dice, $sides, $min_value, $num_to_drop) = @_; $num_dice ||= 3; $min_value ||= 1; $num_to_drop ||= 0; return () unless $num_dice >= 1; return () unless $num_dice > $num_to_drop; my @values = sort { $a <=> $b } map { roll_die($sides, $min_value) } 1 .. $num_dice; return @values[$num_to_drop .. $#values]; } my @values = my_roller(4, 6, 2, 1); print "@values\n";