Почему моя Perl труба zcat не умрет, если файл там нет?

StackOverflow https://stackoverflow.com/questions/4014425

  •  26-09-2019
  •  | 
  •  

Вопрос

Если мой файл 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 Выполняется (с любым результатом), поэтому нет причин умирать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top