# Do this once for efficiency. use vars qw(%NUM_OPS %STR_OPS); BEGIN { $NUM_OPS{$_} = eval "sub { \$_[0] $_ \$_[1] }" foreach (qw(< <= != >= > ==)); $STR_OPS{$_} = eval "sub { \$_[0] $_ \$_[1] }" foreach (qw(lt le ne ge gt eq)); } #### $v = ${$pairs{$ca}}[0]; if ($types{$ca}) { $v = 0 unless defined $v; $op = $NUM_OPS{$co}; } else { $v = '' unless defined $v; $op = $STR_OPS{$co}; } die("Undefined operation $co.\n") unless $op; $r &= $op->($v, $cv);