Rules cannot be conveniently modeled as subroutines so there are some helpers to handle them
sub rule {
$game->{RULES}{valid_card( rule => shift )};
}
sub number_rule {
my ($type,$default) = shift;
my ($n) = map { /^rule\.$type\.(.+)$/ } $game->rules;
return if !defined($n) && !defined($n = $default);
return 1e9 if $n eq 'All';
numeral($n);
}
sub numeral {
my $n = shift;
$n++ if rule('x_plus_1');
$n;
}
sub valid_card {
my $card = join '.' => @_;
confess("Non existant card $card")
unless $game->whole_pack->{$card};
$card;
}