我想在lib路徑中使用$ var變量。如何在lib路徑中使用變量?
my $var = "/home/usr/bibfile;"
use lib "$var/lib/";
但是我這樣做時,它拋出一個錯誤。
我想使用use lib "$var/lib/";
而不是use lib "/home/usr/bibfile/lib/";
。
如何分配一個變量,以便它可以用於設置lib模塊?
我想在lib路徑中使用$ var變量。如何在lib路徑中使用變量?
my $var = "/home/usr/bibfile;"
use lib "$var/lib/";
但是我這樣做時,它拋出一個錯誤。
我想使用use lib "$var/lib/";
而不是use lib "/home/usr/bibfile/lib/";
。
如何分配一個變量,以便它可以用於設置lib模塊?
首先,你有一個簡單的語法錯誤 - 你在第一行後缺少;
。 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 ...
];
@ikegami,lib也會檢查並添加目標的標準版本和arch子目錄(如果找到)。 –
不知道你要完成什麼,但似乎是FindBin::libs任務:
my $var;
BEGIN { $var = "/home/usr/bibfile" };
use FindBin::libs "Bin=$var", "base=lib";
我想使用'use lib「$ var/lib /」;'放入'use lib「/ home/usr/bibfile/lib /」;'。我如何分配一個變量,以便它可以用於lib模塊的設置。 – Sourcecode
好吧,編輯答案以滿足您的特定需求:)但是,我建議您避免使用硬編碼的絕對路徑並使用相對於您當前腳本的相對路徑(這是FindBin :: libs的用途) – creaktive
@creaktive您的回答現在遇到與提問者遇到的相同的錯誤。您可以在接受的答案中使用解決方案解決此問題。 – MattLBeck
你不能,因爲use
指令在編譯時進行評估,而其他變量則在運行時進行評估。
如果你的lib位於相對某處你的原始腳本,你可以使用標準的模塊FindBin
:
# $Bin from FindBin is the directory of the original script
use FindBin;
use lib "$FindBin::Bin/path/to/bib";
use MyModule;
你有一些圖書館在非標準的目錄,你想使用它? – xhudik
是的。圖書館是在非標準的目錄。 – Sourcecode