如何在perl模块中启用当前启用的警告检查集?

jm6*_*666 10 perl

perllexwarn中定义了所有可能设置的警告.

但这里没有任何关于,如何打印出我目前启用的警告.

例如:

use strict;
use warnings;

print warnings::enabled->pretty_print(); #fictional...
Run Code Online (Sandbox Code Playgroud)

这怎么可能?

例:

use strict;
use 5.012;
use warnings;

my $aaa;
say "$aaa";

say warnings::enabled("uninitialized") ? "yes" : "no";
Run Code Online (Sandbox Code Playgroud)

以上将输出:

Use of uninitialized value $aaa in string at y line 6.

no
Run Code Online (Sandbox Code Playgroud)

所以,"未初始化"警告类别是"设置",因为它打印一个警告,但warnings::enabled("uninitialized")不返回true.

cho*_*oba 7

阅读perllexwarn

...对模块作者有用的函数.当您要向调用模块报告特定于模块的警告时,会使用这些警告通过"警告"编译指示启用警告.

如果我理解正确,则意味着函数(enabled,warnif)仅适用于特定于模块的警告,而不适用于标准类别.(在文档中"has"之前可能缺少"that".)

更新:似乎标准类别也可以工作,但仅限于模块:

package MY;
use warnings::register;
sub S {
    my $x;
    print $x, "\t";
    print warnings::enabled("uninitialized"),"\n";
}

package main;
use warnings;
MY::S();
no warnings;
MY::S();
Run Code Online (Sandbox Code Playgroud)