the*_*now 54 perl module standard-library
如何检查Perl模块是否是核心的一部分 - 即它是标准安装的一部分?
我在找:
也许问题应该是:如何判断最初在机器上安装特定 Perl的模块?(实际上,它现在被问到如何判断最初在机器上安装特定Perl的模块?)
鉴于现在似乎不是一个整体的Perl标准安装,至少这个新问题的答案将告诉我最初在安装时的安装.
有了这些知识,如果我保留原始的安装程序映像/包或者知道如何在线再次获取确切的东西,那么我可以为多台机器安装可重复的Perl,了解将出现哪些模块以及哪些模块不会出现.
为了进一步澄清:我在看什么就用原来的安装,提供了作为安装的一部分什么模块,什么是内置.不是从那以后安装的.
我希望能够在安装的机器上执行此操作.因此,我将依靠安装以某种形式记录它最初的内容.
我问分拆问题: 如何判断最初在机器上安装特定Perl的模块?(如何判断最初在计算机上安装特定Perl的模块?)
too*_*lic 61
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)
Run Code Online (Sandbox Code Playgroud)
这是在脚本中使用它的一种方法.该Module::CoreListPOD太简洁-你不得不通过源代码猎找到叫什么方法:
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 core\n";
}
else {
print "$mod not in core\n";
}
__END__
Carp in core
Run Code Online (Sandbox Code Playgroud)
你可以签perlmodlib入一个子:
my %_stdmod;
sub is_standard_module {
my($module) = @_;
unless (keys %_stdmod) {
chomp(my $perlmodlib = `perldoc -l perlmodlib`);
die "cannot locate perlmodlib\n" unless $perlmodlib;
open my $fh, "<", $perlmodlib
or die "$0: open $perlmodlib: $!\n";
while (<$fh>) {
next unless /^=head\d\s+Pragmatic\s+Modules/ ..
/^=head\d\s+CPAN/;
if (/^=item\s+(\w+(::\w+)*)/) {
++$_stdmod{ lc $1 };
}
}
}
exists $_stdmod{ lc $module } ? $module : ();
}
Run Code Online (Sandbox Code Playgroud)
用法示例:
die "Usage: $0 module..\n" unless @ARGV;
foreach my $mod (@ARGV) {
my $stdmod = is_standard_module $mod;
print "$0: $mod is ", ($stdmod ? "" : "not "), "standard\n";
}
Run Code Online (Sandbox Code Playgroud)
输出:
$ ./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
真的没有"核心"这样的东西了.曾经有一个标准的Perl发行版,但很多人没有标准的Perl发行版.操作系统分发通过添加或删除模块,更改模块等来修改它.您不能依赖标准分布实际上是标准的.某些Linux发行版甚至不包含Perl文档作为基本Perl安装的一部分.
您提到不能使用Module :: CoreList,因为它不是核心,但如果您可以创建文件,则可以安装模块.你甚至可以假装自己写了.
| 归档时间: |
|
| 查看次数: |
9905 次 |
| 最近记录: |