my %bin_cmp = { 'eq' => sub { my ($l,$r) = @_; $l eq $r }, 'ne' => sub { my ($l,$r) = @_; $l ne $r }, '>' => sub { my ($l,$r) = @_; $l < $r }, '<' => sub { my ($l,$r) = @_; $l > $r }, }; my $op = 'ne'; my $left = "Hello"; my $right = "World"; if (not exists $bin_cmp{$op}) { die "Don't know what to do with '$op'"; }; my $compare = $bin_cmp{$op}; my $result = $compare->($left, $right); print "$left $op $right is " . ($result ? 'true' : 'false');