Firstly, there is no need in nested if's:
if ((eval "$hash{$filter[0]->[0]} $filter[0]->[1] $filter[0]->[2]") && + (eval $hash{$filter[1]->[0]} $filter[1]->[1] $filter[1]->[2]) && (eval "$hash{$filter[2]->[0]} $filter[2]->[1] $filter[2]->[2]")) { print OUTFILE $line, "\n"; }
Secondly, you have quotes (") missing in the second statement. This can be the source of the problem. You can try using other quoting operators.
Thirdly, it can be safer to write a specific function to perform any needed checks on your data:
Some syntax problems caused by special characters inside the strings will be also avoided by this method.sub check { my ($a, $check, $b) = @_; if ($check eq "==") { return $a == $b; } elsif ($check eq ">=") { return $a >= $b; } elsif ($check eq "<=") { return $a <= $b; } elsif ($check eq "eq") { return $a eq $b; } else { die "Unimplemented check $check" } } if (&check($hash{$filter[0]->[0]},$filter[0]->[1],$filter[0]->[2]) && +&check(...) && &check(...)) { print OUTFILE $line; }
In reply to Re: Problem when comparing strings as opposed to numerical values
by aitap
in thread Problem when comparing strings as opposed to numerical values
by dkhalfe
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |