13

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

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

use lib "$var/lib/";

但是,当我这样做时,它会引发错误。

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

我怎样才能分配一个变量,以便它可以在 lib 模块的设置中使用?

4

3 回答 3

26

变量在 中可以正常工作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 ...
    ];
于 2012-12-19T10:56:56.060 回答
1

不确定您要完成什么,但似乎是FindBin::libs的任务:

my $var;
BEGIN { $var = "/home/usr/bibfile" };
use FindBin::libs "Bin=$var", "base=lib";
于 2012-12-19T10:58:31.850 回答
-2

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

如果您的库位于相对于原始脚本的某个位置,则可以使用标准模块FindBin

# $Bin from FindBin is the directory of the original script
use FindBin;
use lib "$FindBin::Bin/path/to/bib";
use MyModule;
于 2012-12-19T10:59:26.283 回答