内容

名称

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() 函数搜索系统上所有已安装的 .packlist 文件,并存储其内容。可以使用下面描述的函数查询 .packlist 文件。默认情况下,它搜索的位置由 %Config::Config 中的设置以及 PERL5LIB 环境变量的值决定。

方法

除非另有说明,否则所有方法都可以作为类方法或对象方法调用。如果作为类方法调用,则将使用“默认”对象,如果需要,则使用当前进程的 %Config 和 @INC 创建。有关详细信息,请参阅 new() 的“默认”选项。

new()

此方法接受可选的命名参数。如果没有参数,它将使用来自 %Config::Config 的信息和默认模块搜索路径 @INC 在系统上搜索所有已安装的 .packlists。这些 packlists 使用 ExtUtils::Packlist 模块读取。

如果命名参数 skip_cwd 为真,则在搜索 .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' 以及相关的 'default_get' 和 'default_set' 选项。这些选项控制类接口提供的“默认”对象,用于访问方法。将 default_get 设置为 true 会告诉构造函数在定义默认对象时返回默认对象。将 default_set 设置为 true 会告诉构造函数将默认对象设置为构造的对象。设置 default 选项就像将两者都设置为 true 一样。这主要用于内部,对任何实际用户来说可能并不有趣。

modules()

此方法返回所有已安装模块名称的列表。perl 'core' 被赋予特殊名称 'Perl'。

files()

此方法接受一个必填参数,即模块的名称。它返回包中所有文件名的列表。要获取核心 perl 文件的列表,请使用模块名称 'Perl'。允许使用其他参数。第一个参数是字符串 "prog"、"doc" 或 "all" 之一,用于选择仅程序文件、仅手册文件或所有文件。其余参数是目录列表。返回的文件名将限制在指定目录下的文件名。

directories()

此方法接受一个必填参数,即模块名称。它返回包中所有目录的列表。允许使用其他参数。第一个参数是字符串 "prog"、"doc" 或 "all" 之一,用于选择仅程序目录、仅手册目录或所有目录。其余参数是目录列表。返回的目录将限制在指定目录下的目录。此方法仅返回包含指定模块文件的叶子目录。

directory_tree()

此方法与 directories() 的操作相同,只是它还包括所有中间目录,一直到指定的目录。

validate()

此方法接受一个必填参数,即模块名称。它检查模块 .packlist 中列出的所有文件是否都存在,并返回任何丢失文件的列表。如果提供一个可选的第二个参数,该参数的值为真,则会从 .packlist 中删除任何丢失的文件。

packlist()

此方法返回指定模块的 ExtUtils::Packlist 对象。

version()

此方法返回指定模块的版本号。

EXAMPLE

请参阅 ExtUtils::Packlist 中的示例。

AUTHOR

Alan Burlison <[email protected]>