您正在从Perl 5.37.3查看此文档的版本。这是Perl的开发版本。

内容

名称

perlos390-构建和安装Perl for z/OS(以前称为OS/390)

简介

本文档将帮助您在z/OS Unix System Services上配置、构建、测试和安装Perl。

描述

这是一个用于z/OS的移植Perl。它已经在z/OS 2.4上进行了测试,应该可以在z/OS 2.5上正常工作。它可能在其他版本或发行版上运行,但这些版本或发行版本都是经过测试的版本。

z/OS的本机字符集是EBCDIC,但它也可以在ASCII模式下运行。Perl可以支持任何一种,但您必须为其中一种或另一种显式编译它。您可以在同一台机器上同时使用ASCII perl和EBCDIC perl。如果您使用ASCII模式和ASCII perl,那么可以使用perl附带的Encode模块来转换各种EBCDIC代码页中的文件以供perl处理,然后再返回输出

本文档描述了如何构建64位动态Perl(ASCII或EBCDIC)。您可以交互选择其他配置,以及作为构建过程一部分运行的配置脚本中的许多其他选项。在运行Configure之前,您可能需要执行一些系统配置任务,如下所述。

工具

您将希望获得GNU make 4.1或更高版本。GNU make可以从Rocket Software提供的端口下载。您需要IBM的z/OS c99编译器(尽管xlc在c99模式下没有启用优化,但在EBCDIC中可以工作)。

如果您想要最新的Perl开发版本,则需要git。您可以在另一个平台上使用git,并通过sftp或ftp将结果传输到z/OS。但Rocket Software提供了一个z/OS原生git客户端端口。

您可能还需要Rocket Software提供的gunzip客户端端口来解压缩上传到z/OS的压缩tarball。

构建64位动态ASCII Perl

要从Perl的官方稳定版本进行构建,请访问https://www.perl.org/get.html并选择“Download latest stable source”(下载最新稳定源代码)按钮中的任意一个。这会给你一个柏油球。该tarball的名称类似于“perl-V.R.M,tar,gz”,其中V.R.M是您正在下载的perl的版本/发布/修改。

gunzip perl-V.R.M.tar.gz公司

然后是其中之一:

焦油-xvf perl-V.R.M.tarpax-r-f perl-V.r.M.tar

其中任何一个都将创建源目录。您可以将其重命名为任何您喜欢的名称;对于这些指令,假定名称为“perl”。

相反,如果您希望使用z/OS上的本机git获得最新的不稳定开发版本,请克隆Perl:

git克隆https://github.com/Perl/perl5.git珍珠

无论哪种方式,一旦您有一个包含源代码的“perl”目录,将其cd到其中,并将所有代码标记为ASCII:

光盘perl车箱-R-h-t-cISO8859-1*

将构建环境配置为64位、动态、ASCII、开发,并将其部署到/usr/local/perl/ascii:

导出路径=$PWD:$PATH导出LIBPATH=$PWD:$PATH./Configure-Dprefix=/usr/local/perl/ascii-des-Dusedevel\-Duse64比特球-Dusedl

如果你是从一个稳定的来源构建,你不需要“-Dusedevel”。(如果您在没有选项的情况下运行Configure,它将根据对特定计算机上可用内容的探测,以交互方式询问每个可能的选项,以便您可以在进行时进行选择。)

运行GNU make构建Perl

制作

运行测试以确保Perl正常工作。目前,在将近2500个测试中,大约有12个测试失败

制作测试线束

将Perl安装到/usr/local/perl/ascii:

进行安装

构建64位动态EBCDIC Perl

您需要在连接到目标机器的某个盒子上安装一个有效的perl。在z/OS上,它可以是ASCII perl,也可以是以前的EBCDIC。许多机器已经在运行预构建的perl,或者可以很容易地从https://www.perl.org/get.html.

按照上面“构建64位动态ASCII Perl”中的说明,直到获得一个填充的“Perl”目录。然后回来继续。

下载的perl需要转换为1047 EBCDIC。为此,请执行以下操作:

cd perl端口/makerel-e

如果Porting/makerel步骤因无法发出tar命令而失败,请继续以交互方式发出该命令,其中V.R.M是您正在上载的Perl的版本/版本/修改:

光盘/tar cf---format=ustar perl-V.R.M|gzip--best>perl-V.R.M.tar.gz

使用sftp将压缩后的tar文件上载到z/OS:

sftp<您的系统>光盘/tmp放置perl-V.R.M.tar.gz

在z/OS上解压缩并解压缩tar文件:

光盘/tmpgunzip perl-V.R.M.tar.gz公司

然后是其中之一:

焦油-xvf perl-V.R.M.tarpax-r-f perl-V.r.M.tar

现在您已经有了z/OS上EBCDIC Perl的源代码,可以继续构建它不应该标记代码,但不要标记。

将构建环境配置为64位、动态、本机、开发,并将其部署到/usr/local/perl/ebcdic:

导出路径=$PWD:$PATH导出LIBPATH=$PWD:$PATH./Configure-Dprefix=/usr/local/perl/ebcdic-des-Dusedevel\-Duse64比特球-Dusedl

如果你是从一个稳定的来源构建,你不需要“-Dusedevel”。(如果您在没有选项的情况下运行Configure,它将根据对特定计算机上可用内容的探测,以交互方式询问每个可能的选项,以便您可以在进行时进行选择。)

运行GNU make构建Perl

制作

运行测试以确保Perl正常工作。

制作测试线束

您可能还希望在运行Perl的“makeinstall”步骤之前安装GNUgroffforOS/390。

将Perl安装到/usr/local/perl/ebcdic:

进行安装

EBCDIC Perl仍在开发中。据我们所知,所有核心代码都能正常工作,但您可能想从CPAN下载的各种模块却不能。故障范围从很小到灾难性。其中许多只是测试中的错误,模块实际上工作正常。这是因为,例如,测试被编码为期望某个字符的ASCII码点;当它取回EBCDIC值时,它会抱怨。但代码确实有效。其他并非真正失败的潜在失败源于不同的校验和,因为A类例如,字符集之间具有不同的位表示。期望ASCII值的测试将显示失败,即使模块工作正常。同样,在ASCII系统中,大写字母排在小写字母之前;EBCDIC上的相反。

一些CPAN模块与下载的perl捆绑在一起。其中一些问题尚未解决,无法在EBCDIC平台上传递。因此,当您运行“make test”时,它们会被跳过。当前列表为:

存档::Tar配置::Perl::VCPAN::元CPAN::元::YAML摘要::MD5摘要::SHA编码ExtUtils::MakeMakerExtUtils::清单HTTP::微小IO::压缩IPC::命令JSON::PP格式图书馆网MIME类型:Base64模块::元数据PerlIO::via-QuotedPrint播客::Checker吊舱吊舱::简单插座测试::线束

另请参见提示/os390.sh其他潜在的陷阱。

OS/390上Perl的设置和实用程序

这可能也是确保您/etc/协议文件和您的/etc/resolv.conf/等/主机文件已就位。描述此类USS系统设置问题的IBM文档是“z/OS UNIX系统服务规划”

为了成功进行测试,如果您还没有打开世界可读/tmp目录的粘性位(请参阅man-chmod),那么您可能需要打开粘性位。

用于故障排除的有用文件

如果配置失败,请阅读提示/os390.sh此文件提供特定于z/OS的选项来指导构建过程。

壳牌公司

以下形式的消息:

(我看到你在使用Korn shell。一些ksh在Configure上爆炸了,主要针对较古老的外来系统。如果你有,试试Bourne shell相反。)

没什么可担心的。

动态载荷

如果您希望使用CPAN中的XS模块(如DBI(和DBD)、JSON::XS和Text::CSV_XS),或者使用较新版本(如Encode)从CPAN更新CORE模块,而不重建所有perl二进制文件,则需要动态加载。

上面的说明将创建一个动态Perl。如果不想使用动态加载,请删除-Dusedl选项。有关动态加载的更多信息,请参阅提示/os390.sh中的注释。

优化

优化尚未打开。如果Perl经过优化,可能会出现问题。

在OS/390上使用Perl构建异常

Perl构建过程中的“内存不足!”消息通常通过从源代码工具包重新构建用于OS/390的GNU make实用程序来修复。

在USS内,您的/等/配置文件$HOME/.profile文件可能会限制您的ulimit设置。检查以下命令是否返回合理的值:

ulimit-a(乌利米特-a)

为了节省内存,您应该将编译器模块加载到链接包区域(LPA/ELPA)中,而不是链接列表或步骤库中。

如果编译器在构建Socket扩展期间抱怨语法错误,请确保修复系统头文件/usr/include/sys/Socket.h中的语法错误。

在OS/390上使用Perl测试异常

“maketest”步骤通常在安装之前运行Perl验证过程。即使在成功运行“maketest”期间,您也可能会遇到STDERR消息。以下是一些常见异常的指南:

内存不足(仅限31位)

内存不足问题不应该是问题,除非您试图构建一个31位Perl。

如果您正在构建一个31位Perl,那么受限的环境可能意味着您需要更改Perl的内存选项。除了上面关于内存限制的注释外,还值得在您的环境中检查_CEE_RUNOPTS。Perl现在(在miniperlmain.c中)有一个31位的c#pragma,用于设置CEE运行选项,但环境变量胜出。

31位C代码要求:

#pragma runopts(HEAP(2M,500K,ANYWHERE,KEEP,8K,4K)堆栈(,,ANY,)ALL31(ON))

其中重要的部分是HEAP的第二个参数(增量),并允许堆栈“位于(16M)行之上”。如果堆增量太小,那么当perl(例如加载unicode/Name.pl)试图创建一个“大”(400K+)字符串时,它无法容纳在一个单独的段中,您会得到“内存不足!”-即使仍然有足够的内存可用。

一个相关的问题是与perl的malloc一起使用。Perl的malloc使用sbrk()获取内存,以及sbrk()仅限于第一次分配,因此在本例中类似于:

堆(8M、500K、任意位置、保持、8K、4K)

需要通过测试套件。

z/OS上Perl的使用提示

在z/OS上使用Perl时,请记住EBCDIC和ASCII字符集是不同的。请参见珍珠色有关此类字符集问题的更多信息。perlport.pod文档中还提到了在EBCDIC下可能表现不同的Perl内置函数。

如果方括号有问题,请考虑切换rlogin或telnet客户端。尽量避免使用旧的3270模拟器和ISHELL在USS上使用Perl。

z/OS上Perl的模块和扩展(仅限静态)

纯Perl(即非XS)模块可以通过以下常用方式安装:

perl生成文件。损益制作进行测试进行安装

如果您使用动态加载功能构建perl,那么这也是构建基于XS的扩展的方法。然而,如果您使用静态链接构建perl,您仍然可以为z/OS构建基于XS的扩展,但您需要遵循ExtUtils::MakeMaker中的说明来构建静态链接的perl二进制文件。在最简单的配置中,构建静态perl+XS扩展可以归结为:

perl生成文件。损益制作制作perl进行测试进行安装make-f Makefile.aperl inst_perl MAP_TARGET=perl

在z/OS上运行Perl

要运行64位Dynamic Perl环境,请更新您的PATH和LIBPATH以包含您安装Perl的位置,然后运行您作为perlV安装的Perl。R.M,其中V/R/M是当前开发级别的版本/发布/修改级别。如果您正在运行ASCII/EBCDIC Bi-Modal Perl环境,还需要设置ASCII/ECCDIC Bi-Modal环境变量,并确保使用“chtag-t-c<CCSID>”将您运行的任何Perl源代码适当标记为ASCII或EBCDIC:

仅适用于ASCII:
export _BPXK_AUTOCVT=开export _CEE_RUNOPTS=“FILETAG(AUTOCVT,AUTOTAG),POSIX(ON)”导出_TAG_REDIR_ERR=“txt”导出_TAG_REDIR_IN=“txt”export_TAG_REDIR_OUT=“txt”
对于ASCII或EBCDIC:
export PATH=/usr/local/perl/ascii:$PATHexport LIBPATH=/usr/local/perl/ascii/lib:$LIBPATH珀尔维。R.M参数

如果tcsh是您的登录shell,则使用setenv命令。

作者

David Fiander和Peter Prymmer感谢Dennis Longnecker和William Raffloer提供的宝贵报告、LPAR和PTF反馈。感谢Mike MacIsaac和Egon Terwedow提供SG24-5944-00。感谢Ignasi Roca指出浮点问题。感谢John Goodyear提供的动态加载帮助。

Mike Fulton和Karl Williamson提供了UTF8、DLL、64位和ASCII/EBCDIC双模支持的更新

其他站点

https://github.com/ZOSOpenTools/perlport/提供了用于构建各种z/OS Perl配置的文档和工具,并在“bin”目录中提供了一些有用的工具,您可能希望使用这些工具自己构建z/OS Perl。

历史

2021年12月24日更新,启用初始ASCII支持

2019年10月3日更新perl-5.33.3+

2001年11月28日更新了断开的URL。

2001年3月12日更新,提及//“SYS1.TCPPARMS(TCPDATA)”。

2001年1月24日更新,提及动态荷载。

Perl 5.7.1版本于2001年1月15日更新。

2000年11月12日更新了Perl 5.7.1版本。

本文档是为Perl的5.005_03版本于1999年3月11日发布的。

本文档最初是由David Fiander为5.005版Perl编写的。