Du bist zu schlau. Tun Sie das einfach:
%Vor%Die Probleme sind zweifach:
)
in Ihrem if my
im Ausdruck Kontext bindet sehr eng; $attribute
ist nicht im lexikalischen Bereich bis zum Hauptteil der bedingten Anweisung , die sie enthält, sodass der andere Zweig von and
nicht darauf zugreifen kann. Sie müssen es wie in meinem Beispiel in den enthaltenden Kontext heben. use strict;
hätte das Problem gefunden.
Eine my
-Deklaration wirkt sich nur auf nachfolgende Anweisungen aus, nicht auf die Anweisung, in der sich die Deklaration befindet. (Gleiches gilt für die Deklarationen our
und local
.) Das heißt $attribute
, das Sie mit my
erstellen und dem Sie eine andere Variable zuweisen als $attribute
, das Sie mit Y
vergleichen. Du willst
Wenn nun $Data->{is_new}
nicht existiert oder nicht definiert ist, wird $attribute
undefiniert sein und der Vergleich mit Y
wird eine Warnung ausgeben. Sie können diese Warnung wie folgt vermeiden:
Alternativ: (5.10 +)
%Vor%Wie bereits erwähnt, können Sie keine Variable deklarieren und gleichzeitig verwenden. So ist es halt; Sie müssen die Deklarationsanweisung abschließen, bevor Sie die neue Variable verwenden können.
Was Sie jedoch getan haben könnten, und ich bin ehrlich gesagt etwas verloren , warum dies noch nicht erwähnt wurde, ist dies:
%Vor% $attribute
ist noch nicht deklariert, aber $Data->{'is_new'}
ist .
Nur um klar zu sein: Der Punkt dieser if-Anweisung wäre dann drei Dinge:
$attribute
zu
'Y'
ist
Der lexikalische Geltungsbereich von $attribute
ist das Innere des if-Statements nachfolgenden Blocks, nicht mehr und nicht weniger.
Tags und Links perl variables if-statement