#!/usr/bin/perl use strict; use warnings; use lib 'lib'; use Carp qw(confess); use Benchmark qw(cmpthese); use Math::Expression::Evaluator; use Data::Dumper; my $statement = '2 + a + 5 + (3+4)'; my $iterations = $ARGV[0] || 200; sub with_optimize { my $m = Math::Expression::Evaluator->new($statement); $m->optimize; for (1..$iterations){ $m->val({a => $_}); } } sub no_optimize { my $m = Math::Expression::Evaluator->new($statement); for (1..$iterations){ $m->val({a => $_}); } } sub compiled { my $m = Math::Expression::Evaluator->new($statement); my $c = $m->compiled(); for (1..$iterations){ $c->({a => $_}); } } sub opt_compiled { my $m = Math::Expression::Evaluator->new($statement); $m->optimize(); my $c = $m->compiled(); for (1..$iterations){ $c->({a => $_}); } } my %tests = ( optimize => \&with_optimize, no_optimize => \&no_optimize, compiled => \&compiled, opt_compiled => \&opt_compiled, ); #for (100,1000,10000){ # print $_, "\n"; # $tests{'opt ' . $_} = sub { with_optimize($_) }; # $tests{'noopt ' . $_} = sub { no_optimize($_) }; #} cmpthese(-2, \%tests); # vim: expandtab