in reply to Problem when comparing strings as opposed to numerical values
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; }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Problem when comparing strings as opposed to numerical values
by dkhalfe (Acolyte) on Jul 19, 2012 at 21:00 UTC | |
by aitap (Curate) on Jul 20, 2012 at 08:06 UTC |