Почему моя Perl труба zcat не умрет, если файл там нет?
Вопрос
Если мой файл GZ не существует, почему он не умрет?
$ cat test.pl
open(FILE, "zcat dummy.gz |") or die "DIE";
$ ./test.pl
zcat: dummy.gz: No such file or directory
Если я прочитал файл обычно, он работает как ожидалось:
$ cat test2.pl
open(FILE, "dummy.gz") or die "DIE";
$ ./test2.pl
DIE at ./test.pl line 2.
Решение
Твой open
успешно (как это успешно работает ZCAT), вы не получите zcat
Выходной код до тех пор, пока не закройте дескриптор файла.
Возможно, вы захотите проверить, существует ли файл и читается до начала начнете, например,.
die "unable to read file" unless (-f "dummy.gz" and -r "dummy.gz")
Другие советы
Вы можете рассмотреть вопрос PerlIO::gzip
, например.
use PerlIO::gzip;
open(FILE, '<:gzip', 'dummy.gz') or die $!;
Во втором примере Файл, открытый Perl не существует, так что он умрет.
В вашем первом примере Команда вызывается Perl Выполняется (с любым результатом), поэтому нет причин умирать.
Не связан с StackOverflow