2012-12-19 60 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; 
相關問題