我正在尝试从具有BEGIN
块的Perl模块初始化全局变量,但我无法让它工作。
这是Perl模块
Package A::B;
our $var;
BEGIN{
$var ||= "/some/default/path";
#create/access files/folders in $var
}
这是我的CGI脚本
use A::B;
$A::B::var = "/correct/path";
但#error
返回,因为$ var不是正确的路径
在将正确的路径分配给BEGIN
之前,正在执行$var
块。有没有办法解决这个问题,而无需从BEGIN
块中删除代码?
答案 0 :(得分:3)
BEGIN { $A::B::var = "/correct/path" }
use A::B;
这个答案对我来说并不令人满意,但考虑到你的A :: B是如何设计的,我想不出任何其他方式。理想情况下,模块不依赖于谁在使用它或频率,但该模块实际上只能使用一次。