如何判断机器上特定Perl安装最初提供的模块?

时间:2010-01-18 11:11:15

标签: perl deployment perl-module

如何判断机器上特定Perl安装最初提供的模块?

(这是的副本: How can I tell if a Perl module is core or part of the standard install? (“如何判断Perl模块是核心还是标准安装的一部分?”) - 它实际上是一个衍生问题)

我正在寻找安装最初附带的内容,作为该安装的一部分提供了哪些模块,内置了什么。不是从那以后安装的。

我希望这可以与任何 Perl版本一起使用。

我希望能够做到这一点:

  • 在具有安装的计算机上的Perl程序本身/命令中使用脚本。因此,我将依靠安装以某种形式记录它最初的内容。
  • 在我安装之前,在下载的软件包上
  • 。问它有什么模块。

我想这样做的原因是:

  • 我想知道在编写使用Perl安装的机器上运行的软件时我可以期望哪些模块是默认模块,以及我需要添加哪些模块不是默认模块
  • 如果我保留原始安装程序映像/包或者知道如何在线再次获取确切的东西,那么我可以为多台机器安装可重复的一致Perl,并知道将出现哪些模块以及哪些模块不会出现。< / LI>
  • 我的Perl软件将有一个定义明确的部署程序,因为很容易准确定义软件所需的内容
  • 由于我的组织中存在的策略,我可能无法轻松更新/升级Perl版本(这就是它的方式,我不想对此进行侧面讨论)。这样的政策是合理的,因为总是有风险升级到可以超过收益的新软件。因此,开发人员需要知道他们可以获得什么。

我之所以提出这个问题是因为,对于任何Perl版本,似乎没有一种自动方式来找出整体标准安装,这些安装定义了您的机器上的默认安装中可能出现的模块 - 看问题: How can I tell if a Perl module is core or part of the standard install? (“如何判断Perl模块是核心还是标准安装的一部分?”)

不能依赖Perl版本来告诉您哪些模块存在与否。当然,可能有在线文档告诉你。但我需要一个自动方式在我下载/安装的版本上执行此操作。即使是不同Linux / Unix发行版上的相同Perl版本也可能不同。

3 个答案:

答案 0 :(得分:6)

对于Debian或Ubuntu,您可以使用

$ dpkg --listfiles perl | grep '\.pm$'

对于Redhat:

$ rpm -ql perl | grep '\.pm$'

答案 1 :(得分:6)

一般情况下你不能。如果您接受并从不同的角度处理问题,那么您将获得更少的挫败感。 Module::CoreList提供了应该包含在所有安装中的列表,但是供应商不需要遵守这些列表,并且大多数发行版都包含许多不属于核心。除非建立自己的数据库,包括每个发行版的哪个版本 - 这是一项艰巨的任务 - 没有太多希望。请注意,即使对于随发行版附带的模块,安装的版本也可能不同。

我可以看到几种不同的方法来解决这个问题:

  1. 如果您在开发时知道目标(例如具体的目标) 您可以根据它做出决定。
  2. 对于一般情况,像模块一样部署应用程序并指定 依赖。例如使用Module::Build并列出的先决条件 Build.pl脚本的requires部分。 cpan shell可以关注并解决 自动依赖。
  3. 如果您想完全回避问题,请使用PARPar::Packer 创建自包含的部署包。

答案 2 :(得分:0)

  我正在寻找附带的东西   最初安装,什么模块   是作为其中一部分提供的   安装,什么是内置的。不   从那以后安装了什么。

对于非核心模块,您可以解析perllocal.pod,根据日期分离与Perl安装本身一起安装的初始批量模块。您正在寻找以下行:

=head2 Wed Apr 30 15:40:38 2008: C<Module> L<URI|URI>

所以前几个可能是那些与Perl本身安装并且应该具有相同日期的那些(当然不是同一时间)。那些安装了24小时或更长时间的人将是你想要的。

不确定核心模块,因为在我看来,你在上一个问题中得到的答案是令人满意的,但显然你并不这么认为。可能我错过了一些东西:)

干杯, 报价