包含或perl的IF语句

包含或perl的IF语句,perl,if-statement,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以外的任何内容的所有行。因为每个数字都是

这是一个很简单的问题,但我似乎无法解决这个问题。为什么这段代码成功地打印了$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以外的任何内容的所有行。

因为每个数字都是83或!=99或两者兼而有之,使用
|
将不起作用

使用
&&
仅获取83和99以外的数字:

if ( $F[1] != 83 && $F[1] != 99 ) {
如果要检查的列表较长,您可能需要执行以下操作,例如:

if ( ! grep $_ == $F[1], 83, 99, 107, 133, 150 ) {

永远不要忘记以下逻辑规则:

(not (A and B)) == (not(A) or  not(B))

(not (A or B))  == (not(A) and not(B))

然后使用,如
if($F[1]!=83&&$F[1]!=99).
谢谢。我误解了并认为,$F[1]等于83和99的条件是荒谬的。是否有必要重述正在测试的变量,或者可以将其缩短为类似
$F[1]!=83或99
?相反,或是无意义的,因为每个数字都不是!=83或!=99或更糟!谢谢你澄清这一点。