amo*_*mon 25
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 (+)
}
Run Code Online (Sandbox Code Playgroud)
输出:hello在STDERR上.
但这不能用于从您调用的代码中删除警告(动态范围).这也不会使用户定义的警告静音.
在这种情况下,您可以为__WARN__伪信号编写处理程序:
use warnings;
{
local $SIG{__WARN__} = sub { };
foo();
print "bye\n";
}
sub foo {
warn "hello\n";
1 + undef;
}
Run Code Online (Sandbox Code Playgroud)
输出:bye在STDOUT上.
我们可以将它抽象成一个函数muffle:
sub muffle {
my $func = shift;
local $SIG{__WARN__} = sub { };
return $func->(@_);
}
muffle(\&foo, 1, 2, 3); # foo(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
然而,这是一件令人难以置信的愚蠢行为:
undef值字符串化为空字符串,并且不希望发出任何警告.这里概述的策略不处理致命异常,Try::Tiny而是使用.
| 归档时间: |
|
| 查看次数: |
18391 次 |
| 最近记录: |