如果文件不存在,为什么我的Perl管道没有zcat死?

dog*_*ane 4 perl pipe zcat

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

$ cat test.pl    
open(FILE, "zcat dummy.gz |") or die "DIE";

$ ./test.pl    
zcat: dummy.gz: No such file or directory
Run Code Online (Sandbox Code Playgroud)

如果我正常读取文件,它按预期工作:

$ cat test2.pl    
open(FILE, "dummy.gz") or die "DIE";

$ ./test2.pl    
DIE at ./test.pl line 2.
Run Code Online (Sandbox Code Playgroud)

Has*_*kun 5

你的open成功(因为它成功运行zcat),zcat在关闭文件描述符之前,你不会得到退出代码.

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

die "unable to read file" unless (-f "dummy.gz" and -r "dummy.gz")
Run Code Online (Sandbox Code Playgroud)