Perl - Verwendung von nicht initialisierten Wert?
So, ich versuche diesen code auszuführen...
my $filePath = $ARGV['0'];
if ($filePath eq ""){
print "Missing argument!";
}
Sollte geprüft werden, ob der erste Kommandozeilen-argument, und sagen Sie mir, wenn seiner leer ist, aber es gibt diesen Fehler zurück, und ich kann nicht herausfinden, warum:
Use of uninitialized value $filePath in string eq at program.pl line 19.
Was mache ich falsch?
was ist mit
'
rund um den array-index?InformationsquelleAutor A Clockwork Orange | 2011-03-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur überprüfen, ob $ARGV[0] definiert ist
Diese wird print "Kein Dateipfad Angegeben!\n" wenn keiner da war übergebene Befehlszeile.
Das problem, das Sie in Betrieb, Sie setzen $filePath einen undefinierten Wert. Warnhinweise beschwert, da haben Sie dann versucht zu vergleichen, ein nicht definierter Wert "". Warnungen denkt, dass es Wert ist, erzählt Sie etwa.
Ich habe mit meinem Beispiel zu zeigen, eine saubere Art und Weise zu überprüfen, ob etwas definiert ist, sondern auch technisch für diesen, könnte man auch einfach machen:
InformationsquelleAutor Caterham
Leer und nicht initialisiert sind nicht das gleiche. Sie können überprüfen, ob eine variable initialisiert wurde mit der
defined
Betreiber, wie zum Beispiel:Ich bin mir ziemlich sicher, dass Sie gemeint ist:
(ohne die Anführungszeichen)
wow, hätte nie gedacht, dass. thx.
Ich mag:
if ( ! defined $filePath || ! length $filePath )
InformationsquelleAutor Mat
Alternative Antwort ist ein default-Wert, wenn es nicht definiert ist:
InformationsquelleAutor vol7ron
EDIT: @Andrew wies darauf hin, das ist nicht das gleiche, wie es schlägt fehl mit dem Dateinamen "0"
Auch, statt
als @Mat schrieb. Sie können einfacher
welches genau das gleiche tut
InformationsquelleAutor anydot