如何检查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 core\n"; } else { print "$mod not in core\n"; } __END__ Carp in core
你可以签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 : (); }
用法示例:
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"; }
输出:
$ ./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,因为它不是核心,但如果您可以创建文件,则可以安装模块.你甚至可以假装自己写了.