4

如果我的 gz 文件不存在,为什么它不会 DIE?

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

3 回答 3

5

您成功了(因为它成功运行了 zcat),但在您关闭文件描述符之前open,您不会获得退出代码。zcat

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

die "unable to read file" unless (-f "dummy.gz" and -r "dummy.gz")
于 2010-10-25T12:23:52.003 回答
3

您可能需要考虑使用PerlIO::gzip,例如。

use PerlIO::gzip;
open(FILE, '<:gzip', 'dummy.gz') or die $!;
于 2010-10-25T12:21:25.623 回答
3

在你的第二个例子中,perl 打开的文件不存在,所以它会死。

在您的第一个示例中,perl 调用的命令执行(任何结果),因此没有理由死。

于 2010-10-25T12:24:44.697 回答