包含OR perl的IF语句

时间:2016-05-04 13:40:21

标签: perl if-statement

一个非常简单的问题,但我似乎无法弄清问题。为什么这段代码成功打印了$ 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之外的所有行。

2 个答案:

答案 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 ) {