次のスニペットは期待どおりに機能しません。
$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"} の両方が定義されているため、期待される出力は "Defined" です。ただし、コードを実行すると、「未定義」が返されます。
ここで、コードをいじってみると、各not defined()
呼び出しを括弧で囲むと、望ましい結果が得られることがわかりました。
if((not defined($k{"foo"})) && (not defined($k{"bar"}))){print "Not Defined"}
これは演算子の優先順位と関係があると思いますが、正確に何が起こっているのか誰か説明できますか?