2010-10-25 3 views
4

Если мой gz-файл не существует, почему он не УМЕРЕТ?Почему мой Perl-канал не умирает, если файл отсутствует?

$ 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. 

ответ

5

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

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

die "unable to read file" unless (-f "dummy.gz" and -r "dummy.gz") 
3

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

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

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

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