一个非常简单的问题,但我似乎无法弄清问题。为什么这段代码成功打印了$ F [1]不等于83的所有行:
if ($F[1] != 83) {
print OUT2 "$_\n";
}
但是这个片段(包含一个OR语句)只是打印所有行,忽略了两个标准:
if ($F[1] != 83 || $F[1] != 99) {
print OUT2 "$_\n";
}
期望的结果是打印$ F [1]包含除83或99之外的所有行。
答案 0 :(得分:5)
永远不要忘记以下逻辑规则:
(not (A and B)) == (not(A) or not(B))
(not (A or B)) == (not(A) and not(B))
答案 1 :(得分:4)
由于每个号码都是!= 83或!= 99或两者都有,因此使用||
将不起作用。
使用&&
代替仅获取83和99以外的数字:
if ( $F[1] != 83 && $F[1] != 99 ) {
如果您需要检查更长的列表,可能需要执行以下操作:
if ( ! grep $_ == $F[1], 83, 99, 107, 133, 150 ) {