当 Perl 解释我的代码时,我经常出现以下几个警告:
Smartmatch is experimental at /home/user/www/cgi-bin/safari/lib/SAFARI/Data.pm line 395.
Run Code Online (Sandbox Code Playgroud)
以及我重写包含错误的 CPAN 模块的子例程的几个地方:
Subroutine Net::Amazon::S3::Client::Object::put_part redefined at /usr/local/share/perl5/FaithTree/Backup.pm line 65.
Run Code Online (Sandbox Code Playgroud)
这两点都是代码中有意为之的。我发现 Smartmatch 是一个很棒的工具,我有意使用它,没有出现任何问题,并且我特别重写了这些子例程,因为它们在上游模块中无法正常运行。有没有一种“正确”的方法来告诉 Perl 不要显示此类警告?如果仍然需要它们,是否有适当的方法至少可以控制它们,这样它就不会淹没服务器日志?
我阅读了另一个可以用来隐藏 Smartmatch 警告的问题。use experimental qw(smartmatch switch);但我不太确定如何处理重新定义警告。
use experimental qw(feature ...);
Run Code Online (Sandbox Code Playgroud)
在没有警告的情况下使用实验性功能。要抑制其他警告,请在启用编译指示的情况下运行代码,no warnings ...如perldoc中所述
no warnings 'redefine';
sub Someone::Elses::Package::my_monkey_patch_func { ... }
@c = (1, 2, undef, 4);
print join(";", @c); # emits warning
{
no warnings 'uninitialized';
print join(":", @c); # warning suppressed
}
Run Code Online (Sandbox Code Playgroud)