目錄

名稱

ExtUtils::Installed - 已安裝模組的清單管理

語法

use ExtUtils::Installed;
my ($inst) = ExtUtils::Installed->new( skip_cwd => 1 );
my (@modules) = $inst->modules();
my (@missing) = $inst->validate("DBI");
my $all_files = $inst->files("DBI");
my $files_below_usr_local = $inst->files("DBI", "all", "/usr/local");
my $all_dirs = $inst->directories("DBI");
my $dirs_below_usr_local = $inst->directory_tree("DBI", "prog");
my $packlist = $inst->packlist("DBI");

說明

ExtUtils::Installed 提供一個標準的方式來找出已安裝的核心和模組檔案。它使用安裝過程中建立的 .packlist 檔案中儲存的資訊來提供這些資訊。此外,它還提供分類已安裝檔案和從 .packlist 檔案中提取目錄資訊的功能。

用法

new() 函數會搜尋系統上所有已安裝的 .packlists,並儲存其內容。.packlists 可使用以下說明的功能查詢。其預設搜尋位置由 %Config::Config 中的設定值以及 PERL5LIB 環境變數的值決定。

方法

除非另有說明,否則所有方法都可以作為類別方法或物件方法呼叫。如果呼叫為類別方法,則會使用「預設」物件,必要時會使用目前的處理程序 %Config 和 @INC 來建立。有關詳細資訊,請參閱 new() 中的「預設」選項。

new()

這會採用選擇性的命名參數。若無參數,這會使用來自 %Config::Config 和預設模組搜尋路徑 @INC 的資訊,搜尋系統上所有已安裝的 .packlists。packlists 會使用 ExtUtils::Packlist 模組來讀取。

如果命名參數 skip_cwd 為 true,在搜尋 .packlists 之前,目前的目錄 . 會從 @INC 中移除。這可以防止 ExtUtils::Installed 找到安裝在其他 Perl 中的模組,而這些 Perl 恰好位於目前的目錄下方。

如果指定了命名參數 config_override,它應該是對雜湊的參考,其中包含通常在 %Config::Config 中找到的所有資訊。例如,您可以取得個別 Perl 安裝的組態資訊並傳遞進去。

my $yoda_cfg  = get_fake_config('yoda');
my $yoda_inst =
           ExtUtils::Installed->new(config_override=>$yoda_cfg);

類似地,參數 inc_override 可以是對陣列的參考,用於取代來自 @INC 的預設模組搜尋路徑。

use Config;
my @dirs = split(/\Q$Config{path_sep}\E/, $ENV{PERL5LIB});
my $p5libs = ExtUtils::Installed->new(inc_override=>\@dirs);

注意:您可能不想要單獨使用這些選項,幾乎在所有情況下,您都會想要同時設定兩個選項。

參數 extra_libs 可用於指定用於搜尋已安裝模組的其他路徑。例如

my $installed =
         ExtUtils::Installed->new(extra_libs=>["/my/lib/path"]);

這只在 /my/lib/path 不在 PERL5LIB 中時才需要。

最後是「預設」選項,以及相關的「預設取得」和「預設設定」選項。這些選項控制由類別介面提供給方法的「預設」物件。將 default_get 設定為 true 會指示建構函數在定義預設物件時傳回該物件。將 default_set 設定為 true 會指示建構函數將預設物件設為已建構的物件。設定 default 選項就像同時將兩個選項都設定為 true。這主要在內部使用,對任何實際使用者而言可能都不感興趣。

modules()

這會傳回所有已安裝模組名稱的清單。perl「核心」會給予特殊名稱「Perl」。

files()

這需要一個強制參數,也就是模組名稱。它會傳回來自套件的所有檔案名稱清單。若要取得核心 perl 檔案清單,請使用模組名稱「Perl」。允許多個其他參數。第一個參數是字串「prog」、「doc」或「all」之一,用於選取僅程式檔案、僅手冊檔案或所有檔案。其餘參數是目錄清單。傳回的檔案名稱將限制為在指定目錄下的檔案。

directories()

這需要一個強制參數,模組名稱。它會傳回套件中所有目錄的清單。允許其他參數。第一個是字串「prog」、「doc」或「all」之一,用於選取僅程式目錄、僅手冊目錄或所有目錄。其餘參數是目錄清單。傳回的目錄將限制在指定目錄下的目錄。此方法僅傳回包含指定模組檔案的葉目錄。

directory_tree()

這與 directories() 的運作方式相同,但它包含所有中間目錄,直到指定目錄。

validate()

這需要一個強制參數,模組名稱。它會檢查模組 .packlist 中列出的所有檔案是否實際存在,並傳回任何遺失檔案的清單。如果給定評估為 true 的第二個選用引數,任何遺失的檔案將從 .packlist 中移除

packlist()

這會傳回指定模組的 ExtUtils::Packlist 物件。

version()

這會傳回指定模組的版本號碼。

範例

請參閱 ExtUtils::Packlist 中的範例。

作者

Alan Burlison <Alan.Burlison@uk.sun.com>