2010-10-25 59 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的退出代码。

您可能想要检查文件是否存在并且在开始之前是可读的,例如。

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调用的命令执行(带有任何结果),因此没有理由死亡。

相关问题