Почему мой Perl-канал к zcat не умирает, если файла там нет? - PullRequest
4 голосов
/ 25 октября 2010

Если мой 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.

Ответы [ 3 ]

5 голосов
/ 25 октября 2010

Ваш open успешен (поскольку он успешно запускает zcat), вы не получите код выхода zcat, пока не закроете дескриптор файла.

Возможно, вы захотите проверить, существует ли файл и доступен ли он для чтения, прежде чем начать, например.

die "unable to read file" unless (-f "dummy.gz" and -r "dummy.gz")
3 голосов
/ 25 октября 2010

Во втором примере файл , открытый perl , не существует, поэтому он умрет.

В первом примере команда , вызываемая perl выполняется (с любым результатом), поэтому нет причин для смерти.

3 голосов
/ 25 октября 2010

Вы можете рассмотреть возможность использования PerlIO::gzip, например.

use PerlIO::gzip;
open(FILE, '<:gzip', 'dummy.gz') or die $!;
...