Il seguente frammento non funziona come previsto:Perl di "non" operatore non funziona come previsto con l'definita() funzione
$k{"foo"}=1;
$k{"bar"}=2;
if(not defined($k{"foo"}) && not defined($k{"bar"})){
print "Not defined\n";
}
else{
print "Defined"
}
Dal momento che sia $ k { "pippo"} e $ k { "bar" } sono definiti, l'output previsto è "Defined". L'esecuzione del codice, tuttavia, restituisce "Non definito".
Ora, giocando con il codice che ho capito che l'immissione parentesi attorno a ciascuna delle not defined()
chiamate produce il risultato desiderato:
if((not defined($k{"foo"})) && (not defined($k{"bar"}))){print "Not Defined"}
immagino questo ha qualcosa a che fare con la precedenza degli operatori, ma qualcuno potrebbe spiegare che cosa esattamente sta succedendo?