所以不要想放
BEGIN {push @INC , '/folder1', '/folder2', '/folder3'}
找到我的模块。 我想能够放一个变量,比如这个。
my $test = '/folder1';
BEGIN {push @INC , $test, '/folder2', '/folder3'}
无论我做什么,它仍然找不到我想要的模块。
答案 0 :(得分:5)
在解析代码期间执行BEGIN
,因此它将在其外部的变量赋值发生之前执行。
解决方案是在BEGIN
块内进行分配:
my $test;
BEGIN {
$test = "/some/path";
}
use lib $test, "/path2", "path3";
use lib …
优于unshift @INC, …
答案 1 :(得分:3)
我建议您使用lib
:
@INC
use lib '/folder2', '/folder3';
此外,use
和BEGIN
块会尽快执行,因此如果要将变量包含在一个中,则必须在BEGIN
块中初始化:
our $test;
BEGIN {
$test = "/some/path";
}
use lib $test, '/folder2', '/folder3';
答案 2 :(得分:1)
BEGIN
语句在其他任何运行之前运行 - 即使BEGIN语句出现在程序的后面。您正在使用的变量也必须出现在BEGIN
内。 my
语句结束后,使用BEGIN
声明的任何变量都将超出范围。
BEGIN {
my $test = '/folder1';
push @INC, $test, '/folder2', '/folder3';
}
我不确定这会给你带来什么。您仍然需要修改程序。您可能需要use lib;
:
use lib qw(/folder1);
use lib qw(/folder2 /folder3);
# use lib qw(/folder4); # Don't use