在PHP中,您可以在函数调用前使用@
来禁止返回警告。
Perl中有类似内容吗?
答案 0 :(得分:24)
PHP的这个功能很疯狂,应尽可能避免使用。
Perl有两种例外:致命错误和警告。警告可以由Perl本身发出,也可以由用户代码发出。
在某个静态/词汇范围内,Perl的内置警告可以关闭,如:
use warnings;
foo();
sub foo {
no warnings 'uninitialized'; # recommended: only switch of specific categories
warn "hello\n";
1 + undef; # Otherwise: Use of uninitialized value in addition (+)
}
输出:STDERR上的hello
。
但是这不能用于从调用(动态范围)的代码中删除警告。这也不会使用户定义的警告静音。
在这种情况下,您可以为__WARN__
伪信号编写处理程序:
use warnings;
{
local $SIG{__WARN__} = sub { };
foo();
print "bye\n";
}
sub foo {
warn "hello\n";
1 + undef;
}
在STDOUT输出:bye
。
我们可以将其抽象为函数muffle
:
sub muffle {
my $func = shift;
local $SIG{__WARN__} = sub { };
return $func->(@_);
}
muffle(\&foo, 1, 2, 3); # foo(1, 2, 3)
然而,这是一件非常愚蠢的事情:
undef
值字符串化为空字符串,并且不希望有任何警告。此处列出的策略不会处理致命异常,请改用Try::Tiny
。
答案 1 :(得分:3)
您也可以运行perl -X
并停用所有警告。
我认为有充分理由做这个FWIW。
答案 2 :(得分:0)
更简单的方法是使用no warnings;
有关详细信息,请参阅perldoc链接。用大括号括起语句,以消除警告信息。
E.g。
{
no warnings;
<statement giving warning>
}