我正在回复一份需要大量文本处理的合同的招标请求。主要的麻烦是客户希望能够在任何UNIX(HPUX,Solaris,AIX,FreeBSD)或Linux(SLES,RHEL)平台上运行它,这可能会限制我使用它做什么。他们不希望将额外工具的安装作为先决条件。
我在Perl和awk之间挣扎。我知道Perl是处理文本的理想工具(而且我很擅长)但是,在我提出需要Perl的RFT响应之前,我想知道是否有人在平台上运行其中默认情况下未安装Perl。
在RFT中列出这些平台并让客户选择他们想要的方式是很方便的。我有一个模糊的回忆,它在默认安装中不在FreeBSD上,也可能是非Linux平台也没有它。
可以建议任何其他工具,但鉴于我对Perl和awk的熟悉,他们可能是候选名单中唯一的。
答案 0 :(得分:13)
您可以获得针对任何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 licens e允许您将其与您的程序捆绑在一起,只要您遵循一些简单的操作,例如保持版权。
答案 1 :(得分:4)
如果客户端的计算机上没有Perl,则可以始终使用Par::Packer为该平台创建可执行文件。这也意味着您不必担心使用模块,因为它们也将包含在可执行文件中。
答案 2 :(得分:3)
几乎每个* nix(除了一些非常有限的磁盘空间)都安装了Perl。 AFAIK,甚至是FreeBSD。如果不是,您可以将Perl程序转换为不需要perl PAR::Packer的可执行文件。
答案 3 :(得分:2)
即使几乎每个* nix平台上都安装了Perl,它们可能不是同一个版本,所以请注意这一点。要求它需要在大多数* nix上运行,您只需使用shell +实用程序进行编码即可。对于解析文件,awk + shell也可以完成这项工作。你只需要以“便携式”格式编写它。查看this以获取更多信息
答案 4 :(得分:2)
虽然我猜你所提到的操作系统的所有当前版本都安装了Perl,但当然会有旧版本的版本没有,也没有。您还应该意识到,甚至像awk这样的工具也不是经常安装在非常旧的UN * X版本上,因为它和其他编程工具都是可选的附加功能(需要额外付费)。我记得甚至TCP / IP堆栈的Altos系统是一个额外的成本项目,但可能你不会那么远: - )
底线:如果您的应用确实需要Perl,您应该检查它是否已安装(通过Bourne shell脚本 - 如果该功能不起作用,您真的被搞砸了)如果没有提供某种方式安装它。
答案 5 :(得分:0)
并非所有人都有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