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ディレクティブはコンパイル時に評価され、他の変数は実行時に評価されるため、できません。

libが元のスクリプトに対して相対的な場所にある場合は、標準モジュールを使用できます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 に答える