2012-10-18 1 views
8

期待どおり次のコードが動作していない。Perlの定義()関数で期待通りに動作しない「ではない」オペレータ

$k{"foo"}=1; 
$k{"bar"}=2; 
if(not defined($k{"foo"}) && not defined($k{"bar"})){ 
    print "Not defined\n"; 
} 
else{ 
    print "Defined" 
} 

を$ kを{「FOO」}と$ K {「bar」の両方のため}が定義されている場合、期待される出力は "定義済み"です。ただし、コードを実行すると「未定義」が返されます。私は、これは、演算子の優先順位とは何かを持っている誰かがまさに説明できる想像

if((not defined($k{"foo"})) && (not defined($k{"bar"}))){print "Not Defined"} 

:私はnot defined()通話のそれぞれの周りに括弧を置くことに気づいコードで遊んで今

は、望ましい結果を生成しますやっている?

答えて

22

優先順位の問題です。

not defined($k{"foo"}) && not defined($k{"bar"}) 

は、あなたが実際に

!defined($k{"foo"}) && !defined($k{"bar"}) 

ソリューションをしたいとき

!defined($k{"foo"}) || defined($k{"bar"}) 

にequilvalentある

not (defined($k{"foo"}) && not defined($k{"bar"})) 

を意味し、

  • (not defined($k{"foo"})) && (not defined($k{"bar"}))
    • !defined($k{"foo"}) && !defined($k{"bar"})

    PS - 言語は "Perlの" ではなく、 "PERL" と命名されます。

  • 関連する問題