隐藏与 Perl 中的故意代码相关的警告

Tim*_*ler 4 perl

当 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);但我不太确定如何处理重新定义警告。

mob*_*mob 6

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)

  • 请注意,您需要将“无警告”范围限制为该行,否则它将应用于文件的整个其余部分。`{ 没有警告 '重新定义'; 子...}`。 (6认同)