我正在研究用Perl重寫舊的應用程序。在不同的目錄中設置perl軟件包
設置三個軟件包並從它們運行子例程對我將要做的事情有很大的意義,但我對設置軟件包並不是很熟悉。
我希望軟件包與我的其他Perl腳本處於相同的位置,即此bin目錄中的腳本除了腳本之外無需調用這些軟件包。
我的問題是如何指示Perl知道我的軟件包在哪裏(以及如何將它們安裝在默認的其他位置),這是一個好的/聰明的事情嗎?
我正在研究用Perl重寫舊的應用程序。在不同的目錄中設置perl軟件包
設置三個軟件包並從它們運行子例程對我將要做的事情有很大的意義,但我對設置軟件包並不是很熟悉。
我希望軟件包與我的其他Perl腳本處於相同的位置,即此bin目錄中的腳本除了腳本之外無需調用這些軟件包。
我的問題是如何指示Perl知道我的軟件包在哪裏(以及如何將它們安裝在默認的其他位置),這是一個好的/聰明的事情嗎?
這是一個常見的任務。該PERL5LIB環境變量包含目錄,以尋找一個模塊列表,您還可以使用的lib
pragma指定目錄特定腳本應該尋找模塊:
#!/usr/bin/perl
use strict;
use warnings;
use lib "$ENV{HOME}/lib";
您可能還需要尋找到cpanm
和local::lib
。
如果包和腳本在同一個位置,我推薦使用FindBin
:
use FindBin '$Bin';
use lib $Bin;
如果他們是在相同的位置,是不是路徑已經包括在內? – 2012-07-17 15:41:31
'FindBin'不被棄用,但它以一種非常模糊的方式做事,並且容易中斷,[如此處所述](http://www.perlmonks.org/?node_id=41213)。我認爲[scriptname](https://metacpan.org/module/scriptname)是一個更好的選擇。 – Borodin 2012-07-17 17:10:01
@DimitarPetrov:不一定。 '@ INC'包含當前工作目錄('.'),而不是腳本所在的目錄。如果腳本包含在當前工作目錄中,兩者只是相同的。 – Zaid 2012-07-17 19:55:21