>perl -wMstrict -le "use 5.010; ;; sub expr { state $op_func = { '+' => sub { $_[0] + $_[1] }, '-' => sub { $_[0] - $_[1] }, '*' => sub { $_[0] * $_[1] }, '/' => sub { $_[0] / $_[1] }, }; ;; my ($lhs, $op, $rhs) = split ' ', shift; return $op_func->{$op}->($lhs, $rhs); } ;; for my $op (qw(+ - * /)) { my $exp = qq{4 $op 5}; print $exp, ' = ', expr($exp); } " 4 + 5 = 9 4 - 5 = -1 4 * 5 = 20 4 / 5 = 0.8