首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >沉默STDERR和警告

沉默STDERR和警告
EN

Stack Overflow用户
提问于 2013-10-21 10:28:44
回答 2查看 402关注 0票数 4

warn 4print STDERR 4有什么不同?

代码语言:javascript
复制
perl -e 'local *STDERR; warn 4'

(输出仍然转到STDERR)

代码语言:javascript
复制
perl -e 'local *STDERR; print STDERR 4'

(这里没有输出)

EN

回答 2

Stack Overflow用户

发布于 2013-10-21 10:42:09

还没有沉默STDERR句柄。为了真正让它安静下来,你需要说:

代码语言:javascript
复制
perl -e 'local *STDERR; open(STDERR, ">/dev/null") or die $!; warn 4'

perldoc perlvar告诉我们:

由于'IGNORE'钩子不受__WARN__支持,所以可以使用空子例程禁用警告: 局部$SIG{__WARN__} =子{};

票数 4
EN

Stack Overflow用户

发布于 2013-10-21 10:52:15

这里的local只说从这一点开始,类型STDERR是本地的,在进入这个块时,它不会用sig默认处理程序看到的STDERR句柄改变任何东西。如果您想要真正地沉默STDERR,您需要重新打开其他东西的句柄。

如果您想让它在本地保持沉默,然后恢复,下面是如何做到的,如果您真的必须坚持使用低级别的全局和句柄:

代码语言:javascript
复制
#!/usr/bin/perl -w
sub f() {
    local *STDERR;
    open STDERR, '>/dev/null';
    warn 4;
}
warn 3;
f();
warn 5;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19492036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档