diff options
author | doy <doy@tozt.net> | 2009-01-25 21:07:12 -0500 |
---|---|---|
committer | doy <doy@tozt.net> | 2009-01-25 21:07:12 -0500 |
commit | 0779460c7716b484a79c1a6082938547d023f45f (patch) | |
tree | 38e67fbf5d16eca3c31bf062bb4ae1977d30dd48 | |
parent | d45f080e704a30f510d7bdcf60fa0a66f94c858a (diff) | |
download | bot-games-0779460c7716b484a79c1a6082938547d023f45f.tar.gz bot-games-0779460c7716b484a79c1a6082938547d023f45f.zip |
use Math::Expression::Evaluator rather than feeding expressions through perl's eval
-rw-r--r-- | lib/Bot/Games/Game/24.pm | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/lib/Bot/Games/Game/24.pm b/lib/Bot/Games/Game/24.pm index b4604f4..0f61845 100644 --- a/lib/Bot/Games/Game/24.pm +++ b/lib/Bot/Games/Game/24.pm @@ -4,6 +4,7 @@ use Bot::Games::OO; extends 'Bot::Games::Game'; use List::Util qw/shuffle/; +use Math::Expression::Evaluator; has '+help' => ( default => '24 help', @@ -34,7 +35,7 @@ augment turn => sub { return "invalid numbers" unless $numbers eq $solution; my $eval = $self->evaluate($expr); - if ($eval == 24) { + if (defined($eval) && $eval == 24) { $self->is_over(1); return "$player wins!"; } @@ -89,9 +90,8 @@ sub generate_24 { sub evaluate { my $self = shift; my ($expr) = @_; - return 0 unless $expr =~ /^[-\d\+\*\/\(\)]+$/; - # XXX: ick ick ick - return eval $expr; + return undef unless $expr =~ /^[-\d\+\*\/\(\)]+$/; + return eval { Math::Expression::Evaluator->new->parse($expr)->val }; } __PACKAGE__->meta->make_immutable; |