如果文件不存在,为什么我的 Perl 管道到 zcat 不会终止?

发布于 2024-09-29 02:56:30 字数 328 浏览 9 评论 0原文

如果我的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

浅暮の光 2024-10-06 02:56:30

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

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

die "unable to read file" unless (-f "dummy.gz" and -r "dummy.gz")

Your open succeeds (as it successfully runs zcat), you won't get zcat'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.

die "unable to read file" unless (-f "dummy.gz" and -r "dummy.gz")
家住魔仙堡 2024-10-06 02:56:30

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

use PerlIO::gzip;
open(FILE, '<:gzip', 'dummy.gz') or die $!;

You may want to consider using PerlIO::gzip, eg.

use PerlIO::gzip;
open(FILE, '<:gzip', 'dummy.gz') or die $!;
煮酒 2024-10-06 02:56:30

在你的第二个例子中,由 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文