【发布时间】:2016-12-02 23:35:37
【问题描述】:
我隐约记得warnings pragma 应该在我们加载use 的模块列表中排在最后。我也隐约记得这与模块注册自己的警告类别有关,但我无法重现任何问题。有人可以指出相关文章或展示warnings pragma 的位置产生影响的示例吗?
【问题讨论】:
我隐约记得warnings pragma 应该在我们加载use 的模块列表中排在最后。我也隐约记得这与模块注册自己的警告类别有关,但我无法重现任何问题。有人可以指出相关文章或展示warnings pragma 的位置产生影响的示例吗?
【问题讨论】:
这可能就是您所指的。无论哪种方式,都需要注意,我将其作为错误提交。 编辑 bug 在 v5.27.6 中已修复。
package My::Warnings;
use warnings::register;
sub test {
warnings::warnif 'This is my warning';
}
1;
use strict;
use feature 'switch';
use warnings 'all';
use My::Warnings;
print undef;
given (1) { }
My::Warnings::test();
正如预期的那样,这将输出
given is experimental at E:\Perl\source\main.pl line 10.
Use of uninitialized value in print at E:\Perl\source\main.pl line 8.
This is my warning at E:\Perl\source\main.pl line 12.
但是,如果 any 警告类别被禁用,它也会禁用自定义类别。像这样
use strict;
use feature 'switch';
use warnings 'all';
no warnings 'experimental';
use My::Warnings;
print undef;
given (1) { }
My::Warnings::test();
这只是输出
Use of uninitialized value in print at E:\Perl\source\main.pl line 9.
似乎有必要在use My::Warningsuse My::Warnings 之后启用警告 以让它们执行
use strict;
use feature 'switch';
use My::Warnings;
use warnings 'all';
no warnings 'experimental';
print undef;
given (1) { }
My::Warnings::test();
生产
Use of uninitialized value in print at E:\Perl\source\main.pl line 9.
This is my warning at E:\Perl\source\main.pl line 13.
更重要的是,重新启用关闭自定义警告的类别会使它们被禁用
类似的东西
use strict;
use feature 'switch';
use warnings 'all';
no warnings 'experimental';
use warnings 'experimental';
use My::Warnings;
print undef;
given (1) { }
My::Warnings::test();
只打印
given is experimental at E:\Perl\source\main.pl line 12.
Use of uninitialized value in print at E:\Perl\source\main.pl line 10.
【讨论】: