2016-05-04 5 views
0

非常に単純な質問ですが、問題を把握できないようです。OR perlを含むIF文

if ($F[1] != 83) { 
     print OUT2 "$_\n"; 
    } 

しかし(OR文を含む)このスニペットは、単に両方の基準を無視して、すべての行を印刷します:

if ($F[1] != 83 || $F[1] != 99) { 
     print OUT2 "$_\n"; 
    } 
なぜこのコードのスニペットが正常に$ F [1]が83に等しくないすべての行を印刷しません

所望の結果が動作しません||を使用して、$ F [1]は、すべての番号のいずれか!= 83または!= 99または両方以来83または99

+2

if($ F [1]!= 83 && $ F [1]!= 99)...のようにANDを使用してください。 – PerlDuck

+0

ありがとう。私は誤解して考えて、$ F [1]が83と99の両方に等しい条件を探します。これは無意味です。テストする変数を再記述する必要がありますか? '$ F [1]!= 83 or 99'のように短縮できますか? – AnnaSchumann

+4

の代わりにORは意味がありません。*すべての*が!= 83か!= 99か両方とも – ysth

答えて

3

以外のものが含まれているすべての行を印刷しました。あなたがチェックする長いリストを持っている場合は、例えばやってみたいことがあり

if ($F[1] != 83 && $F[1] != 99) { 

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

は決して忘れない

使用&&ではなく、83と99以外の数字のみを取得します

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

(not (A or B)) == (not(A) and not(B)) 
関連する問題