【问题标题】:Are there Unix platforms where Perl is not installed by default?有没有默认不安装 Perl 的 Unix 平台?
【发布时间】:2010-11-12 22:38:06
【问题描述】:

我正在答复一份需要大量文本处理的合同的招标请求。主要的问题是客户希望能够在任何 UNIX(HPUX、Solaris、AIX、FreeBSD)或 Linux(SLES、RHEL)平台上运行它,这可能会限制我使用它的方式。他们不想将额外工具的安装作为先决条件。

我在 Perl 和 awk 之间纠结。我知道 Perl 是处理文本的理想工具(而且我相当擅长它)但是,在我提出需要 Perl 的 RFT 响应之前,我想知道是否有人在平台上运行默认情况下不安装 Perl。

在 RFT 中列出这些平台并让客户选择他们想走的路会很方便。我有一个模糊的回忆,它在默认安装的 FreeBSD 上没有,也可能是非 Linux 平台也没有它。

可以推荐任何其他工具,但鉴于我对 Perl 和 awk 的熟悉,它们可能是候选名单上唯一的工具。

【问题讨论】:

  • Commercial Unices 往往与非常旧的 Perl 版本捆绑在一起。

标签: linux perl unix awk


【解决方案1】:

几乎每个*nix(除了一些非常有限的磁盘空间)都安装了Perl。 AFAIK,甚至 FreeBSD。万一不是,您可以使用 PAR::Packer 将 Perl 程序转换为不需要 perl 的可执行文件。

【讨论】:

  • @Sinan,我猜“甚至是 BSD”,因为我有一个模糊的想法,他们没有将其作为标准发送,而是通过端口发送。
  • @Pax Duh!那么他的反应是有道理的。我从第 5 版开始就使用 FreeBSD,并且它们都默认安装了 Perl。系统 Perl 往往比端口 Perl 更老,但有一个 shell 脚本允许 root 选择默认的 Perl。
  • 很好,这可能是我(错误)记得的。大多数代码都是 Perl 的基本代码(我什至不做对象),所以如果需要的话,即使在 Perl 4 上也应该运行。
【解决方案2】:

即使 Perl 可能安装在几乎每个 *nix 平台上,它们也可能不是相同的版本,因此请注意这一点。由于要求它需要在大多数 *nix 上工作,您可以只使用 shell+ 实用程序进行编码。对于解析文件,awk+shell 也可以完成这项工作。您只需要以“便携式”格式编写它。查看this了解更多信息

【讨论】:

  • Perl 的目标之一(与许多其他语言不同)是跨版本非常兼容,因此只需编写最低版本。
  • 我猜这应该是 Perl 5.6。
  • 有一些(非常奇怪的)平台没有超过 5.004 的良好 Perl 端口,但通常 5.6 是一个很好的目标——它自 2000 年以来一直在使用。
【解决方案3】:

如果客户的机器上没有 Perl,您可以随时使用 Par::Packer 为该平台创建可执行文件。这也意味着您不必担心使用模块,因为它们也会包含在可执行文件中。

【讨论】:

  • 如果模块专门使用非许可许可证,如 AGPL 或其他内容,请收到警告。您必须实际分发您使用的模块的源代码。不难,但可能会很痛苦。
  • 嗯,我认为一个,你可以从可执行文件中恢复源代码,只要你不修改它,CPAN 应该算作使源代码可用。
  • @Weegee, Par::Packer 只是压缩文件,因此提取任何代码都很简单。 LGPL 可能要求您使用户能够使用他们修改的代码构建新的可执行文件,这可能是一个问题。处理这个问题的最简单方法是将所有相关的库包含在一个单独的 par 文件中。然后您的主文件可以加载辅助文件。
【解决方案4】:

虽然我猜你提到的所有当前版本的操作系统都安装了 Perl,但当然会有一些旧版本没有,也没有。您还应该知道,即使是 awk 之类的工具也不会定期安装在非常旧的 UN*X 版本上,因为它和其他编程工具都是可选的附加工具(需要额外付费)。我记得在 Altos 系统中,甚至 TCP/IP 堆栈都是一个额外的成本项目,但大概你不会回到那么远 :-)

底线:如果您的应用确实需要 Perl,您应该检查它是否已安装(通过 Bourne shell 脚本 - 如果 theat 不起作用,您就真的搞砸了),如果不提供某种方式安装它。

【讨论】:

    【解决方案5】:

    您可以获得为几乎任何 unix 变体编译的 Perl 版本。 Perl 不必“安装”,但可以在应用程序目录中运行。我会将 Perl 与我的发行版捆绑在一起,这样您就可以确保您运行的是相同的版本。

    如果没有在目标操作系统上进行测试,编写一个完全跨平台的 shell 脚本是非常困难的。如果您开发 awk 脚本,您可能会在 Linux 上使用 GNU 变体进行开发,它是 POSIX awk 的超集。我经常配置开源packages on Solaris,并且我不断地发现人们认为您正在运行现代版本的工具的问题。例如,在 Solaris 上,bash 不是标准的 bourne shell (/bin/sh),并且 echo 不带任何参数。如果您尝试使用 POSIX awk 进行编码,您可能会发现自己受到正则表达式库或过时约定的限制。

    Perl's artistic license 允许您将其与您的程序捆绑在一起,只要您遵循一些简单的事情,例如保持版权完整。

    【讨论】:

    • 实际上,这是一个好主意(捆绑在一个子目录中),因为它允许我控制版本,尽管我必须发送多个包(或一个包,其中选择了很多 perl 子目录)运行时,每个平台一个)。我会检查许可证。 +1。
    【解决方案6】:

    并非所有人都有 perl :)

    mmd-sparc% cat /etc/motd
    Sun Microsystems Inc.   SunOS 5.6       Generic August 1997
    mmd-sparc% which perl
    no perl in /usr/bin .
    mmd-sparc%
    mmd-sparc% uname -a
    SunOS mmd-sparc 5.6 Generic_105181-05 sun4m sparc SUNW,SPARCstation-5
    mmd-sparc% date
    Mon Jun  3 10:11:22 EDT 2019
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 2018-12-31
      • 1970-01-01
      • 2012-02-25
      • 2019-04-26
      • 2013-10-28
      • 1970-01-01
      相关资源
      最近更新 更多