10

perllexwarn中定义了所有可以设置的警告。

但是这里没有关于如何打印出我当前启用的警告的内容。

例如:

use strict;
use warnings;

print warnings::enabled->pretty_print(); #fictional...

这怎么可能?

例子:

use strict;
use 5.012;
use warnings;

my $aaa;
say "$aaa";

say warnings::enabled("uninitialized") ? "yes" : "no";

以上将输出:

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

no

因此,“未初始化”警告类别是“设置”,因为它会打印警告,但warnings::enabled("uninitialized")不返回true

4

1 回答 1

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();
于 2012-06-17T22:24:28.107 回答