我如何知道Perl模块是核心还是标准安装的一部分?
我如何检查Perl模块是否是核心的一部分 - 即它是标准安装的一部分?
我在找:
也许这个问题应该是:我怎样才能知道在一台机器上最初提供了哪些模块与特定的Perl安装? (实际上,现在被问到如何知道在一台机器上最初提供哪些模块与特定的Perl安装?)
鉴于现在似乎不是一个完整的Perl标准安装,至少这个新问题的答案会告诉我最初安装时我最初的安装情况。
有了这些知识,如果我保留原始的安装程序映像/软件包或知道如何再次在线获取确切的东西,那么我将为几台机器安装一个可重复的Perl安装程序,并知道哪些模块将存在以及哪些模块不会。
为了进一步阐明:我正在查看最初安装的内容,提供了哪些模块作为安装的一部分,以及内置内容。 不是从那以后安装的。
我希望能够在安装的机器上执行此操作。 所以为此,我将依靠安装以某种形式记录它最初的内容。
我问了一个分拆的问题:我怎么知道在一台机器上最初提供了哪些模块与特定的Perl安装? (我怎么知道在一台机器上最初提供了哪些模块与特定的Perl安装?)
来自Module :: CoreList模块的corelist命令将确定模块是否为Core。
> corelist Carp
Carp was first release with perl 5
> corelist XML::Twig
XML::Twig was not in CORE (or so I think)
这是在脚本中使用它的一种方法。 Module::CoreList
POD太简洁了 - 你必须通过源代码去寻找要调用的方法:
use strict;
use warnings;
use Module::CoreList;
my $mod = 'Carp';
#my $mod = 'XML::Twig';
my @ms = Module::CoreList->find_modules(qr/^$mod$/);
if (@ms) {
print "$mod in coren";
}
else {
print "$mod not in coren";
}
__END__
Carp in core
真的没有像“核心”这样的东西了。 过去有一个标准的Perl发行版,但很多人没有标准的Perl发行版。 操作系统发行版通过添加或删除模块,更改模块等来修改它。 你不能依赖标准分配实际上是标准的。 一些Linux发行版甚至不包括Perl文档作为基本Perl安装的一部分。
你提到你不能使用Module :: CoreList,因为它不是核心,但是如果你可以创建文件,你可以安装模块。 你甚至可以假装自己写了它。
你可以在sub中检查perlmodlib
:
my %_stdmod;
sub is_standard_module {
my($module) = @_;
unless (keys %_stdmod) {
chomp(my $perlmodlib = `perldoc -l perlmodlib`);
die "cannot locate perlmodlibn" unless $perlmodlib;
open my $fh, "<", $perlmodlib
or die "$0: open $perlmodlib: $!n";
while (<$fh>) {
next unless /^=headds+Pragmatics+Modules/ ..
/^=headds+CPAN/;
if (/^=items+(w+(::w+)*)/) {
++$_stdmod{ lc $1 };
}
}
}
exists $_stdmod{ lc $module } ? $module : ();
}
用法示例:
die "Usage: $0 module..n" unless @ARGV;
foreach my $mod (@ARGV) {
my $stdmod = is_standard_module $mod;
print "$0: $mod is ", ($stdmod ? "" : "not "), "standardn";
}
输出:
$ ./isstdmod threads::shared AnyDBM_File CGI LWP::Simple ./isstdmod: threads::shared is standard ./isstdmod: AnyDBM_File is standard ./isstdmod: CGI is standard ./isstdmod: LWP::Simple is not standard
perldoc
绝对是Perl的真正核心和标准安装的一部分。 例如,perl-5.10.1的源代码分发包含
perldoc.PL
,生成perldoc
作为标准安装的一部分 perlmodlib.PL
,生成perlmodlib.pod
作为标准安装的一部分 这不是一个新的增加。 大约十年前的Perl-5.6.0将perlmodlib
作为其真正核心标准安装的一部分。
不包含这些项目的安装是非标准的。 是的,我明白,从您的角度来看,这可能看起来很有学术价值,但您的供应商的包装允许使用非标准安装来打破其他工作程序。
使用Debian的包管理器,您可以使用标准的Perl安装
$ apt-get --install-recommends install perl链接地址: http://www.djcxy.com/p/54579.html
上一篇: How can I tell if a Perl module is core or part of the standard install?
下一篇: How can I recursively delete all .svn directories using Perl?