加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何抑制Perl函数的警告?

发布时间:2020-12-15 23:31:04 所属栏目:大数据 来源:网络整理
导读:在 PHP中,您可以在函数调用前使用@来抑制返回的警告. Perl中有类似的东西吗? 解决方法 PHP的这个功能很疯狂,应该尽可能避免. Perl有两种??例外:致命错误和警告.警告可以由Perl本身发出,也可以由用户代码发出. 在某个静态/词法范围内,Perl的内置警告可以关
在 PHP中,您可以在函数调用前使用@来抑制返回的警告.

Perl中有类似的东西吗?

解决方法

PHP的这个功能很疯狂,应该尽可能避免.

Perl有两种??例外:致命错误和警告.警告可以由Perl本身发出,也可以由用户代码发出.

在某个静态/词法范围内,Perl的内置警告可以关闭,如:

use warnings;

foo();

sub foo {
  no warnings 'uninitialized';  # recommended: only switch of specific categories
  warn "hellon";
  1 + undef;  # Otherwise: Use of uninitialized value in addition (+)
}

输出:你好STDERR.

但这不能用于从您调用的代码中删除警告(动态范围).这也不会使用户定义的警告静音.

在这种情况下,您可以为__WARN__伪信号编写处理程序:

use warnings;
{
  local $SIG{__WARN__} = sub { };
  foo();
  print "byen";
}

sub foo {
  warn "hellon";
  1 + undef;
}

输出:在STDOUT上再见.

我们可以把它抽象成一个函数套接字:

sub muffle {
  my $func = shift;
  local $SIG{__WARN__} = sub { };
  return $func->(@_);
}

muffle(&;foo,1,2,3); # foo(1,3)

然而,这是一件令人难以置信的愚蠢行为:

>警告指出潜在的问题和错误.修复那些而不是忽略它们.
>对于您不感兴趣的类别,请勿首先激活内置警告.很多人都非常高兴unf值字符串化为空字符串,并且不希望任何警告.

这里概述的策略不处理致命异常,而是使用Try::Tiny.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读