2012-12-19 31 views
12

我想在lib路径中使用$ var变量。如何在lib路径中使用变量?

my $var = "/home/usr/bibfile;"

use lib "$var/lib/";

但是我这样做时,它抛出一个错误。

我想使用use lib "$var/lib/";而不是use lib "/home/usr/bibfile/lib/";

如何分配一个变量,以便它可以用于设置lib模块?

+0

你有一些图书馆在非标准的目录,你想使用它? – xhudik

+0

是的。图书馆是在非标准的目录。 – Sourcecode

回答

20

首先,你有一个简单的语法错误 - 你在第一行后缺少;my变量应该在use lib中正常工作。

然而,由于所有use指令在BEGIN块执行,您的变量将在您运行use的那一刻未初始化,所以你需要把初始化中BEGIN块了。

my $var; 
BEGIN { $var = "/home/usr/bibfile"; } 
use lib "$var/lib/"; 

use Data::Dumper; 
print Dumper \@INC; 

给出:

$VAR1 = [ 
     '/home/usr/bibfile/lib/', 
     # ... more ... 
    ]; 
+0

@ikegami,lib也会检查并添加目标的标准版本和arch子目录(如果找到)。 –

1

不知道你要完成什么,但似乎是FindBin::libs任务:

my $var; 
BEGIN { $var = "/home/usr/bibfile" }; 
use FindBin::libs "Bin=$var", "base=lib"; 
+0

我想使用'use lib“$ var/lib /”;'放入'use lib“/ home/usr/bibfile/lib /”;'。我如何分配一个变量,以便它可以用于lib模块的设置。 – Sourcecode

+0

好吧,编辑答案以满足您的特定需求:)但是,我建议您避免使用硬编码的绝对路径并使用相对于您当前脚本的相对路径(这是FindBin :: libs的用途) – creaktive

+1

@creaktive您的回答现在遇到与提问者遇到的相同的错误。您可以在接受的答案中使用解决方案解决此问题。 – MattLBeck

-3

你不能,因为use指令在编译时进行评估,而其他变量则在运行时进行评估。

如果你的lib位于相对某处你的原始脚本,你可以使用标准的模块FindBin

# $Bin from FindBin is the directory of the original script 
use FindBin; 
use lib "$FindBin::Bin/path/to/bib"; 
use MyModule; 
相关问题