当前位置:  开发笔记 > 编程语言 > 正文

如何判断Perl模块是核心还是标准安装的一部分?

如何解决《如何判断Perl模块是核心还是标准安装的一部分?》经验,为你挑选了3个好方法。

如何检查Perl模块是否是核心的一部分 - 即它是标准安装的一部分?

我在找:

命令行命令:

一个Perl子例程/函数来检查代码

也许问题应该是:如何判断最初在机器上安装特定 Perl的模块?(实际上,它现在被问到如何判断最初在机器上安装特定Perl的模块?)

鉴于现在似乎不是一个整体的Perl标准安装,至少这个新问题的答案将告诉我最初在安装时的安装.

有了这些知识,如果我保留原始的安装程序映像/包或者知道如何在线再次获取确切的东西,那么我可以为多台机器安装可重复的Perl,了解将出现哪些模块以及哪些模块不会出现.

为了进一步澄清:我在看什么用原来的安装,提供了作为安装的一部分什么模块,什么是内置.不是从那以后安装的.

我希望能够在安装的机器上执行此操作.因此,我将依靠安装以某种形式记录它最初的内容.

我问分拆问题: 如何判断最初在机器上安装特定Perl的模块?(如何判断最初在计算机上安装特定Perl的模块?)



1> toolic..:

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::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


出于实际目的,"自5.9.2"对于普通人来说意味着"自5.10.0以来":)
模块:: CoreList是一个核心模块5.009002(2005-APR-01)的,根据http://perldoc.perl.org/perl592delta.html.从那时起,它应该保证成为任何正确安装的Perl的一部分,但不是之前.
谢谢,但Module :: CoreList本身是一个核心模块,可以保证在任何标准的Perl安装中都存在?

2> Greg Bacon..:

你可以签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



3> brian d foy..:

真的没有"核心"这样的东西了.曾经有一个标准的Perl发行版,但很多人没有标准的Perl发行版.操作系统分发通过添加或删除模块,更改模块等来修改它.您不能依赖标准分布实际上是标准的.某些Linux发行版甚至不包含Perl文档作为基本Perl安装的一部分.

您提到不能使用Module :: CoreList,因为它不是核心,但如果您可以创建文件,则可以安装模块.你甚至可以假装自己写了.

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有