在 PHP 中,您可以@
在函数调用之前使用来抑制返回的警告。
Perl 中有类似的东西吗?
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 (+)
}
输出:hello
在 STDERR 上。
(可以在此处找到所有警告类别的列表)
但这不能用于从您正在调用的代码中删除警告(动态范围)。这也不会使用户定义的警告静音。
__WARN__
在这种情况下,您可以为伪信号编写一个处理程序:
use warnings;
{
local $SIG{__WARN__} = sub { };
foo();
print "bye\n";
}
sub foo {
warn "hello\n";
1 + undef;
}
输出:bye
在 STDOUT 上。
我们可以将其抽象为一个函数muffle
:
sub muffle {
my $func = shift;
local $SIG{__WARN__} = sub { };
return $func->(@_);
}
muffle(\&foo, 1, 2, 3); # foo(1, 2, 3)
然而,这是一件非常愚蠢的事情:
undef
值字符串化为空字符串,并且不想要任何警告。此处概述的策略不处理致命异常,请Try::Tiny
改用。
您也可以只运行perl -X
并禁用所有警告。
我认为做这个 FWIW 有完全正当的理由。
更简单的方法是使用no warnings;
See perldoc链接了解更多信息。将给出警告的语句用大括号括起来以消除警告消息。
例如
{
no warnings;
<statement giving warning>
}