Warum zcat sterben mein Perl Rohr nicht auf, wenn die Datei nicht dort?
Frage
Wenn meine gz-Datei existiert nicht, warum es nicht sterben?
$ cat test.pl
open(FILE, "zcat dummy.gz |") or die "DIE";
$ ./test.pl
zcat: dummy.gz: No such file or directory
Wenn ich eine Datei normalerweise lesen, funktioniert es wie erwartet:
$ cat test2.pl
open(FILE, "dummy.gz") or die "DIE";
$ ./test2.pl
DIE at ./test.pl line 2.
Lösung
Ihre open
erfolgreich ist (wie es erfolgreich zcat läuft), werden Sie nicht zcat
der Exit-Code erhalten, bis Sie den Dateideskriptor schließen though.
Sie können prüfen wollen, ob die Datei existiert und lesbar ist, bevor Sie jedoch beginnen, zum Beispiel.
die "unable to read file" unless (-f "dummy.gz" and -r "dummy.gz")
Andere Tipps
Sie möchten mit PerlIO::gzip
berücksichtigen, z. B.
use PerlIO::gzip;
open(FILE, '<:gzip', 'dummy.gz') or die $!;
In Ihrem zweiten Beispiel die Datei geöffnet von perl ist nicht vorhanden, so dass er sterben wird.
In Ihrem ersten Beispiel der Befehl aufgerufen durch perl ausführt (egal mit welchem ??Ergebnis), so gibt es keinen Grund zu sterben.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow