Linux 是否存在默认情况下未安装Perl的Unix平台?

Linux 是否存在默认情况下未安装Perl的Unix平台?,linux,perl,unix,awk,Linux,Perl,Unix,Awk,我正在回复一份需要大量文本处理的合同招标书。主要的问题是,客户希望能够在任何UNIX(HPUX、Solaris、AIX、FreeBSD)或Linux(SLES、RHEL)平台上运行此操作,这可能会限制我执行此操作的方式。他们不想让安装额外的工具成为先决条件 我在Perl和awk之间左右为难。我知道Perl是处理文本的理想工具(我对它相当熟练),但是,在我给出需要Perl的RFT响应之前,我想知道是否有人在默认情况下未安装Perl的平台上运行 在RFT中列出这些平台并让客户选择他们想要的方式会很方

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

我在Perl和awk之间左右为难。我知道Perl是处理文本的理想工具(我对它相当熟练),但是,在我给出需要Perl的RFT响应之前,我想知道是否有人在默认情况下未安装Perl的平台上运行

在RFT中列出这些平台并让客户选择他们想要的方式会很方便。我模糊地记得,默认安装中它不在FreeBSD上,也可能是非Linux平台也没有


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

几乎每个*nix(除了一些非常有限的磁盘空间)都安装了Perl。好吧,甚至是免费的。如果不是,您可以将Perl程序转换为不需要Perl的可执行文件。

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

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

尽管我猜您提到的所有当前版本的操作系统都安装了Perl,但当然会有一些旧版本没有安装,也没有安装。您还应该意识到,即使像awk这样的工具也没有定期安装在非常旧的UN*X版本上,因为它和其他编程工具都是可选的附加工具(额外成本)。我记得Altos系统甚至TCP/IP协议栈都是额外的成本项目,但想必你不会走那么远:-)


底线:如果你的应用程序真的需要Perl,你应该检查它是否已安装(通过Bourne shell脚本-如果它不起作用,你就真的完蛋了),如果没有提供安装它的方法。

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

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

e允许您将其与您的程序捆绑在一起,只要您遵循一些简单的事情,比如保持版权的灵活性

并非所有人都有perl:)


Perl的目标之一(与许多其他语言不同)是在不同版本之间非常兼容,因此只需要为最低版本编写。我想这将是Perl 5.6。有一些(非常奇怪)平台在5.004之外没有良好的Perl端口,但通常5.6是一个很好的目标——它从2000年开始使用。@Sinan,我猜是这样的“甚至是BSD“因为我有一个模糊的想法,他们不是标准的,而是通过港口运输的。@Pax-Duh!他的回答很有道理。我从版本5开始就使用FreeBSD,默认情况下它们都安装了Perl。系统Perl往往比端口Perl旧,但是有一个shell脚本,允许root选择默认的Perl。大多数代码都是相当基本的Perl(我甚至不做对象),因此如果需要,应该运行Perl 4。实际上,这是一个好主意(捆绑在一个子目录中),因为它允许我控制版本,尽管我必须提供多个包(或者一个包在运行时选择了许多perl子目录,每个平台一个)。我会查看许可证。+1.如果模块专门使用AGPL或其他非许可证,请注意。您必须实际分发您使用的模块的源代码。这并不困难,但可能会很痛苦。嗯,我认为,您可以从可执行文件中恢复源代码,只要您不修改最后,CPAN应该算作使源代码可用。@Weegee,Par::Packer只是压缩文件,所以提取任何代码都很简单。LGPL可能要求用户使用修改后的代码构建新的可执行文件,这可能是一个问题。最简单的处理方法是将任何相关库包含在你的主文件可以加载二级文件。商业UNICE往往与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