Perl 为什么要使用警告;最后一个?

Perl 为什么要使用警告;最后一个?,perl,warnings,Perl,Warnings,我隐约记得,警告pragma应该排在加载use的美国模块列表的最后。我还模模糊糊地记得,这与注册自己警告类别的模块有关,但我无法重现任何问题。有人能指出一篇相关的文章或举一个例子说明警告的位置有什么不同吗?这可能就是你所指的。不管怎样,这都是需要注意的事情,我将它作为一个bug提交编辑在v5.27.6中修复了该问题 My/Warnings.pm 包我的::警告; 使用警告::注册; 子测试{ 警告::警告如果“这是我的警告”; } 1. main.pl 使用严格; 使用“开关”功能; 使用“全

我隐约记得,
警告
pragma应该排在加载
use
的美国模块列表的最后。我还模模糊糊地记得,这与注册自己警告类别的模块有关,但我无法重现任何问题。有人能指出一篇相关的文章或举一个例子说明
警告的位置有什么不同吗?

这可能就是你所指的。不管怎样,这都是需要注意的事情,我将它作为一个bug提交编辑在v5.27.6中修复了该问题

My/Warnings.pm
包我的::警告;
使用警告::注册;
子测试{
警告::警告如果“这是我的警告”;
}
1.
main.pl
使用严格;
使用“开关”功能;
使用“全部”警告;
使用我的::警告;
打印未定义;
给定(1){}
My::Warnings::test();
正如预期的那样,这将输出

在E:\Perl\source\main.pl第10行给出了实验性的结果。
在E:\Perl\source\main.pl第8行的打印中使用未初始化的值。
这是我在E:\Perl\source\main.pl第12行的警告。
但是,如果禁用任何警告类别,它也将禁用自定义类别。像这样

使用严格;
使用“开关”功能;
使用“全部”警告;
没有“实验性”警告;
使用我的::警告;
打印未定义;
给定(1){}
My::Warnings::test();
这个输出正好

在E:\Perl\source\main.pl第9行打印时使用未初始化值。
而且似乎有必要在
使用My::warnings
后启用警告,以使它们执行

使用严格;
使用“开关”功能;
使用我的::警告;
使用“全部”警告;
没有“实验性”警告;
打印未定义;
给定(1){}
My::Warnings::test();
产生

在E:\Perl\source\main.pl第9行打印时使用未初始化值。
这是我在E:\Perl\source\main.pl第13行的警告。


更新 此外,重新启用关闭自定义警告的类别将使其处于禁用状态

像这样的

使用严格;
使用“开关”功能;
使用“全部”警告;
没有“实验性”警告;
使用“实验性”警告;
使用我的::警告;
打印未定义;
给定(1){}
My::Warnings::test();
印刷品

在E:\Perl\source\main.pl第12行给出了实验性的结果。
在E:\Perl\source\main.pl第10行的打印中使用未初始化的值。
。我还没有回应。克里索斯托莫斯神父说:“不久前,我怀疑我们遇到了这样的问题。”。他对底层代码的描述很有启发性。