在 Foo.pm 中使用此代码:
use strict;
use warnings;
package Foo;
BEGIN {
$Foo::AUTHORITY = 'cpan:ETHER';
}
1;
将文件作为模块加载不会出现错误:
$ perl -I. -mFoo -e1
$
然而,直接加载文件会:
$ perl Foo.pm
Name "Foo::AUTHORITY" used only once: possible typo at Foo.pm line 6.
而且,perl -e'require "Foo.pm"'
也不警告。
为什么会有这种差异?显然,文件的解析方式不同,但是如何以及为什么?