warn 4和print STDERR 4有什么不同?
perl -e 'local *STDERR; warn 4'(输出仍然转到STDERR)
perl -e 'local *STDERR; print STDERR 4'(这里没有输出)
发布于 2013-10-21 10:42:09
您还没有沉默STDERR句柄。为了真正让它安静下来,你需要说:
perl -e 'local *STDERR; open(STDERR, ">/dev/null") or die $!; warn 4'perldoc perlvar告诉我们:
由于
'IGNORE'钩子不受__WARN__支持,所以可以使用空子例程禁用警告: 局部$SIG{__WARN__} =子{};
发布于 2013-10-21 10:52:15
这里的local只说从这一点开始,类型STDERR是本地的,在进入这个块时,它不会用sig默认处理程序看到的STDERR句柄改变任何东西。如果您想要真正地沉默STDERR,您需要重新打开其他东西的句柄。
如果您想让它在本地保持沉默,然后恢复,下面是如何做到的,如果您真的必须坚持使用低级别的全局和句柄:
#!/usr/bin/perl -w
sub f() {
local *STDERR;
open STDERR, '>/dev/null';
warn 4;
}
warn 3;
f();
warn 5;https://stackoverflow.com/questions/19492036
复制相似问题