Perls "nicht" -Operator funktioniert nicht wie erwartet mit der definierten () Funktion

8

Das folgende Snippet funktioniert nicht wie erwartet:

%Vor%

Da sowohl $ k {"foo"} als auch $ k {"bar"} definiert sind, ist die erwartete Ausgabe "Defined". Das Ausführen des Codes gibt jedoch "Nicht definiert" zurück.

Jetzt, da ich mit dem Code herumspielte, erkannte ich, dass das Platzieren von Klammern um jeden der not defined() -Aufrufe das gewünschte Ergebnis liefert:

%Vor%

Ich kann mir vorstellen, dass dies etwas mit der Vorrangstellung des Betreibers zu tun hat, aber könnte jemand erklären, was genau vor sich geht?

    
terdon 18.10.2012, 15:48
quelle

1 Antwort

22

Vorrangproblem.

%Vor%

bedeutet

%Vor%

welches zu

äquilibriert ist %Vor%

wenn Sie wirklich wollen

%Vor%

Lösungen:

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

PS - Die Sprache heißt "Perl", nicht "PERL".

    
ikegami 18.10.2012, 15:50
quelle

Tags und Links