lib - 編譯時操作 @INC
use lib LIST;
no lib LIST;
這是一個簡單的小模組,可簡化編譯時操作 @INC 的方式。
它通常用於將額外的目錄新增至 Perl 的搜尋路徑,以便後續的 use
或 require
陳述式可以找到未位於 Perl 預設搜尋路徑中的模組。
use lib
的參數會新增至 Perl 搜尋路徑的開頭。說
use lib LIST;
幾乎等同於說
BEGIN { unshift(@INC, LIST) }
對於 LIST 中的每個目錄(在此稱為 $dir),lib 模組也會檢查是否存在名為 $dir/$archname/auto 的目錄。如果存在,則假設 $dir/$archname 目錄是對應的特定架構目錄,並將其新增至 $dir 前方的 @INC。lib.pm 也會檢查是否存在名為 $dir/$version 和 $dir/$version/$archname 的目錄,並將這些目錄新增至 @INC。
可以使用此指令找到 $archname
的目前值
perl -V:archname
取得 $version
目前值的對應指令為
perl -V:version
為避免記憶體外洩,已移除 @INC 中所有重複的尾隨項目。
通常您應該只將目錄新增至 @INC。如果您需要從 @INC 中刪除目錄,請小心僅刪除您自己新增的目錄,或您確定腳本中的其他模組不需要的目錄。其他模組可能已新增他們正確運作所需的目錄。
no lib
陳述式會從 @INC 中刪除每個命名目錄的所有執行個體。
對於 LIST 中的每個目錄(在此稱為 $dir),lib 模組也會檢查是否存在名為 $dir/$archname/auto 的目錄。如果存在,則假設 $dir/$archname 目錄是對應的特定於架構的目錄,也會從 @INC 中刪除。lib.pm 也會檢查是否存在名為 $dir/$version 和 $dir/$version/$archname 的目錄,並從 @INC 中刪除這些目錄。
當 lib 模組首次載入時,它會在陣列 @lib::ORIG_INC
中記錄 @INC 的目前值。若要將 @INC 還原為該值,您可以說
@INC = @lib::ORIG_INC;
為了讓 lib.pm 保持精簡,它僅適用於 Unix 檔案路徑。這並不表示它僅適用於 Unix,但非 Unix 使用者必須先將他們的檔案路徑轉換為 Unix 慣例。
# VMS users wanting to put [.stuff.moo] into
# their @INC would write
use lib 'stuff/moo';
未來,此模組可能會使用 File::Spec 來確定路徑,就像它現在對 Mac OS 所做的那樣(Unix 風格或 Mac 風格的路徑都能運作,而且 Unix 風格的路徑在新增至 @INC 之前會正確轉換為 Mac 風格的路徑)。
如果您嘗試將檔案新增至 @INC 如下所示
use lib 'this_is_a_file.txt';
lib
會對此發出警告。唯一的例外是具有 .par
副檔名的檔案,這些檔案旨在用作函式庫。
FindBin - 選擇性模組,處理相對於來源檔案的路徑。
PAR - 選擇性模組,可以將 .par
檔案視為 Perl 函式庫。
Tim Bunce,1995 年 6 月 2 日。
lib
由 perl5-porters 維護。請將任何問題轉發至標準郵件清單。不過,任何適用於 CPAN 發行的內容都可以傳送給其維護者。
維護者:Perl5-Porters <perl5-porters@perl.org>
CPAN 發行的維護者:Steffen Mueller <smueller@cpan.org>
此套件自 perl 5.001 以來一直是 perl 核心的一部分。它已個別發行至 CPAN,以便舊安裝可以受益於錯誤修正。
此套件具有與 perl 核心相同的版權和授權。