在Perl模块上初始化全局变量(使用BEGIN块)包括

时间:2013-03-16 01:21:38

标签: perl

我正在尝试从具有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块中删除代码?

1 个答案:

答案 0 :(得分:3)

BEGIN { $A::B::var = "/correct/path" }
use A::B;

这个答案对我来说并不令人满意,但考虑到你的A :: B是如何设计的,我想不出任何其他方式。理想情况下,模块不依赖于谁在使用它或频率,但该模块实际上只能使用一次。