Sie sehen häufig die Überprüfung auf Definiertheit, damit Sie sich nicht mit der Warnung für die Verwendung eines undef-Werts befassen müssen (und in Perl 5.10 wird die fehlerhafte Variable angezeigt):
Use of uninitialized value $name in ...
Um diese Warnung zu umgehen, kommen die Leute auf alle Arten von Code, und dieser Code scheint eher ein wichtiger Teil der Lösung zu sein als der Kaugummi und das Klebeband, die er ist. Manchmal ist es besser zu zeigen, was Sie tun, indem Sie die Warnung, die Sie vermeiden möchten, explizit deaktivieren:
{
no warnings 'uninitialized';
if( length $name ) {
...
}
}
In anderen Fällen verwenden Sie anstelle der Daten einen Nullwert. Mit dem definierten oder Operator von Perl 5.10 können Sie length
anstelle der Variablen, die die Warnung auslöst , eine explizite leere Zeichenfolge (definiert und Länge von Null) zurückgeben:
use 5.010;
if( length( $name // '' ) ) {
...
}
In Perl 5.12 ist dies etwas einfacher, da length
bei einem undefinierten Wert auch undefiniert zurückgegeben wird . Das mag ein bisschen albern erscheinen, aber das freut den Mathematiker, den ich vielleicht sein wollte. Das gibt keine Warnung aus, weshalb diese Frage existiert.
use 5.012;
use warnings;
my $name;
if( length $name ) { # no warning
...
}
length undef
undef zurückgegeben, anstatt zu warnen und 0 zurückzugeben. Im booleschen Kontext ist undef genauso falsch wie 0. Wenn Sie also auf Version 5.12 oder höher abzielen, können Sie einfach schreibenif (length $name) { ... }