2012-12-19 3 views
12

libパスに$ var変数を使用したいと思います。libパスでどのように変数を使用しますか?

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

use lib "$var/lib/";

私はこれを行うときしかし、それはエラーをスローします。

use lib "/home/usr/bibfile/lib/";の代わりにuse lib "$var/lib/";を使用します。

変数を割り当てて、libモジュールの設定で使用できるようにするにはどうすればよいですか?

+0

あなたは非標準的なディレクトリにいくつかのライブラリを持っていて、それを使いたいん:あなたのlibがあなたの元のスクリプトにどこかに相対配置されている場合

は、あなたが標準モジュールFindBinを使用することができますか? – xhudik

+0

はい。図書館は非標準のディレクトリにあります。 – Sourcecode

答えて

20

まず、単純な構文エラーがあります。最初の行の後には;がありません。 my変数はuse libで正常に動作するはずです。すべてuseディレクティブはBEGINブロック内で実行されているので、あなたもBEGINブロックで初期化を配置する必要がありますので、

しかし、あなたの変数は、あなたがuse実行し、現時点では未初期化されます。あなたが達成しようとしているものについて

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

@ikegami、libは、見つかった場合、ターゲットの標準バージョンとアーチのサブディレクトリをチェックして追加します。 –

1

わからないが、FindBin::libsのための作業のように思える:

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

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

は与える、

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

OK、あなたの特定のニーズに合わせて答えを編集:)しかし、私はハードコードされた絶対パスを使用しないようにあなたの現在のスクリプトに相対的なものを使用することをお勧めします(FindBin :: libsの目的です) – creaktive

+1

@creaktive今や始めて遭遇した質問者と同じエラーに悩まされています。あなたは、受諾された答えの中の解を使ってこれを修正することができます。 – MattLBeck

-3

あなたがすることはできませんuse理由ディレクティブはコンパイル時に評価され、他の変数は実行時に評価されます。

# $Bin from FindBin is the directory of the original script 
use FindBin; 
use lib "$FindBin::Bin/path/to/bib"; 
use MyModule; 
関連する問題