2013-03-16 100 views
0

我想从一个Perl模块中初始化一个全局变量,但是我无法设法让它工作。在Perl模块(用BEGIN块)初始化全局变量包括

这是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块中删除代码?

回答

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

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

+0

这个伎俩!谢谢。 我这样做是因为$ var确定数据库的位置,这可能因系统而异 – 2013-03-16 01:40:04