Eth*_*her 2 perl warnings module require
在Foo.pm中使用此代码:
use strict;
use warnings;
package Foo;
BEGIN {
$Foo::AUTHORITY = 'cpan:ETHER';
}
1;
Run Code Online (Sandbox Code Playgroud)
将文件作为模块加载不会出错:
$ perl -I. -mFoo -e1
$
Run Code Online (Sandbox Code Playgroud)
然而,直接加载文件会:
$ perl Foo.pm
Name "Foo::AUTHORITY" used only once: possible typo at Foo.pm line 6.
Run Code Online (Sandbox Code Playgroud)
而且,perl -e'require "Foo.pm"'也没有警告.
为什么会出现这种差异?很明显,文件的解析方式不同,但是如何以及为什么?
"为什么"从技术角度来看,还是从语言设计的角度来看?
从语言的角度来看,这是有道理的,因为模块中引用的变量很可能是模块的公共API的一部分.例如,Data :: Dumper公开了一堆改变其行为的包变量.(可以说是糟糕的设计,但是很好.)这些变量可能只在模块中引用一次,但可能会从程序的其他部分引用.
如果它只在主脚本中引用一次,并且没有模块引用它,那么它更可能是一个错误,所以我们在脚本中得到这个警告,但不在模块中.
从技术角度来看,此警告是由此产生的gv.c.就个人而言,我不能在触发它的确切条件下做头或尾.
| 归档时间: |
|
| 查看次数: |
130 次 |
| 最近记录: |