如果我的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.
答案 0 :(得分:5)
您的open
成功(因为它成功运行zcat),在关闭文件描述符之前,您将不会获得zcat
的退出代码。
您可能想要在开始之前检查文件是否存在且可读,例如
die "unable to read file" unless (-f "dummy.gz" and -r "dummy.gz")
答案 1 :(得分:3)
您可能需要考虑使用PerlIO::gzip
,例如
use PerlIO::gzip;
open(FILE, '<:gzip', 'dummy.gz') or die $!;
答案 2 :(得分:3)
在第二个示例中,由perl 打开的文件不存在,因此它将会死亡。
在你的第一个例子中,perl 调用的命令执行(带有任何结果),所以没有理由死。