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() 的“默认”选项。
此方法接受可选的命名参数。如果没有参数,它将使用来自 %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 一样。这主要用于内部,对任何实际用户来说可能并不有趣。
此方法返回所有已安装模块名称的列表。perl 'core' 被赋予特殊名称 'Perl'。
此方法接受一个必填参数,即模块的名称。它返回包中所有文件名的列表。要获取核心 perl 文件的列表,请使用模块名称 'Perl'。允许使用其他参数。第一个参数是字符串 "prog"、"doc" 或 "all" 之一,用于选择仅程序文件、仅手册文件或所有文件。其余参数是目录列表。返回的文件名将限制在指定目录下的文件名。
此方法接受一个必填参数,即模块名称。它返回包中所有目录的列表。允许使用其他参数。第一个参数是字符串 "prog"、"doc" 或 "all" 之一,用于选择仅程序目录、仅手册目录或所有目录。其余参数是目录列表。返回的目录将限制在指定目录下的目录。此方法仅返回包含指定模块文件的叶子目录。
此方法与 directories() 的操作相同,只是它还包括所有中间目录,一直到指定的目录。
此方法接受一个必填参数,即模块名称。它检查模块 .packlist 中列出的所有文件是否都存在,并返回任何丢失文件的列表。如果提供一个可选的第二个参数,该参数的值为真,则会从 .packlist 中删除任何丢失的文件。
此方法返回指定模块的 ExtUtils::Packlist 对象。
此方法返回指定模块的版本号。
请参阅 ExtUtils::Packlist 中的示例。
Alan Burlison <[email protected]>