Wie um zu überprüfen, dass in der Perl-Variable enthält undef

Aufgabe. Im Code in der Programmiersprache Perl eine Variable. Zu überprüfen ob der Wert dieser Variable undef oder nicht.

Lösung

In der Variable enthält undef nur, wenn die Funktion defined für diese Variable gibt die Lüge. Hier ist der Code zeigt die Text wenn eine Variable enthält undef:

▶ Run
#!/usr/bin/perl

my $foo;

if ( !defined($foo) ) {
    print "foo is undef";
}

Falsche Entscheidungen

Um zu überprüfen, ob undef in der Variablen verwenden müssen defined. Aber oft dass für die überprüfung auf undef verwenden andere, falsche Wege.

Hier ist das erste Beispiel wie nicht zu tun:

▶ Run
#!/usr/bin/perl

my $foo;

if ( !$foo ) { # error!
    print "foo is undef";
}

Dieses Beispiel tatsächlich zeigt die Zeile foo is undef wenn in der Variablen $foo enthält den Wert undef, aber der Code zeigt diese Zeile und in anderen Fällen. Zum Beispiel, wenn in $foo enthält die Anzahl der 0 oder eine leere Zeichenfolge ''. Dieser Code ist kein Test auf die Tatsache, dass in $foo enthält undef, und Umsatzsteuer auf die Tatsache, dass in $foo enthält den Wert-eine Lüge, aber es ist absolut nicht das gleiche was undef.

Hier ein weiteres Beispiel einer fehlerhaften überprüfung auf undef:

▶ Run
#!/usr/bin/perl

my $foo;

if ( $foo == undef ) { # error!
    print "foo is undef";
}

Hier ist gerade alles völlig falsch. Wenn in der Variablen $foo enthält den Wert undefdann dieser Code zeigt Zeile foo is undef, aber der Code wird diese Zeile und in anderen Fällen. Zum Beispiel wenn eine Variable $fooenthält Zeile 'Hello'.

Der Betreiber == ist zum Vergleich von zahlen. Bevor Sie einen Vergleich dieser Operator konvertiert Ihre Argumente in zahlen. Variable $foo in der undef wird die Anzahl der 0. Und undef rechts vom Fahrer ist auch immer die Anzahl der 0. Null gleich null ist, Bedingung ausgelöst wird. Aber null sind und einige Zeilen, zum Beispiel 'Hello'.

Wenn fügen Sie diesen Code in use strict; und use warnings;, das Perl-Zeile zeigt foo is undef, aber auch darüber informiert was Los ist etwas seltsam:

Use of uninitialized value in numeric eq (==) at script.pl line 8.
Use of uninitialized value $foo in numeric eq (==) at script.pl line 8.
foo is undef

Und generell ist es immer eine gute Praxis immer verwenden use strict; und use warnings;.

Verwandte Themen

Andere Artikel