显式包 main 在哪些方面与隐式包 main 不同?

问题描述

我的印象是一个启动的文件

use constant FOO => rand();

有效

package main;
use constant FOO => rand();

但是,如果我有两个带有上述常量声明的文件,一个文件require另一个文件一切正常,而第二个文件会产生警告。 >

常量子程序 main::FOO 在 /usr/lib/x86_64-linux-gnu/perl-base/constant.pm 第 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 语句与其说是声明,不如说是对该词法范围的操作。带有 package main; 的文件将切换到该包,无论当前包是什么,当需要时;如果没有它,它将在需要时处于活动状态的包的上下文中执行。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...