my %operations = ( '+' => sub { (shift) + (shift) }, '-' => sub { (shift) - (shift) }, '*' => sub { (shift) * (shift) }, '/' => sub { (shift) / (shift||1) }, ); my ($left,$op,$right) = ...; #wherever you get them from print exists $operations{$op} ? $operations{$op}->($left,$right) : "dunno operator '$op'", "\n";