如果文件不存在,为什么我的 Perl 管道到 zcat 不会终止?
如果我的 gz 文件不存在,为什么它不会死?
$ 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.
If my gz file does not exist, why doesn't it DIE?
$ cat test.pl
open(FILE, "zcat dummy.gz |") or die "DIE";
$ ./test.pl
zcat: dummy.gz: No such file or directory
If I read a file normally, it works as expected:
$ cat test2.pl
open(FILE, "dummy.gz") or die "DIE";
$ ./test2.pl
DIE at ./test.pl line 2.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您的
open
成功(因为它成功运行了 zcat),但在您关闭文件描述符之前,您不会获得zcat
的退出代码。您可能想在开始之前检查文件是否存在并且可读,例如。
Your
open
succeeds (as it successfully runs zcat), you won't getzcat
's exit code until you close the file descriptor though.You might want to check if the file exists and is readable before you start though, eg.
您可能需要考虑使用
PerlIO::gzip
,例如。You may want to consider using
PerlIO::gzip
, eg.在你的第二个例子中,由 perl 打开的文件不存在,所以它会死掉。
在您的第一个示例中,由 perl 调用的命令执行(产生任何结果),因此没有理由死掉。
In your second example, the file opened by perl does not exist, so it will die.
In your first example, the command called by perl executes (with any result), so there is no reason to die.