显式 package main 与隐式 package main 在哪些方面表现不同?
In what ways does explicit package main perform differently than an implicit package main?
我的印象是一个文件开始
use constant FOO => rand();
有效
package main;
use constant FOO => rand();
但是,如果我有 两个 文件带有上面的常量声明,一个文件 require
s 另一个文件一切正常,而第二个文件将生成一个警告。
Constant subroutine main::FOO redefined at /usr/lib/x86_64-linux-gnu/perl-base/constant.pm line 171.
作为参考,这是我在 f1.pl
中使用的代码,f2.pl
与 相同,但删除了 require
。
# in `f1.pl`
package main;
no warnings;
use constant FOO => rand();
package Other;
require "f2.pl"; # this line should be removed from f2.pl
1;
隐式 package main
与显式 package main
的工作方式有何不同?
包语句与其说是声明,不如说是对该词法范围的操作。带有 package main;
的文件将切换到该包,而不管当前包是什么,当需要时;没有它,它将在需要时处于活动状态的包的上下文中执行。
我的印象是一个文件开始
use constant FOO => rand();
有效
package main;
use constant FOO => rand();
但是,如果我有 两个 文件带有上面的常量声明,一个文件 require
s 另一个文件一切正常,而第二个文件将生成一个警告。
Constant subroutine main::FOO redefined at /usr/lib/x86_64-linux-gnu/perl-base/constant.pm line 171.
作为参考,这是我在 f1.pl
中使用的代码,f2.pl
与 相同,但删除了 require
。
# in `f1.pl`
package main;
no warnings;
use constant FOO => rand();
package Other;
require "f2.pl"; # this line should be removed from f2.pl
1;
隐式 package main
与显式 package main
的工作方式有何不同?
包语句与其说是声明,不如说是对该词法范围的操作。带有 package main;
的文件将切换到该包,而不管当前包是什么,当需要时;没有它,它将在需要时处于活动状态的包的上下文中执行。