perlos400 - OS/400 上的 Perl 5 版本
此文档需要更新,但我们不知道应该写些什么。请将您的意见提交到 https://github.com/Perl/perl5/issues.
本文档描述了 IBM OS/400 操作系统中的各种功能,这些功能会影响 Perl 5 版本(以下简称 Perl)的编译和/或运行方式。
到目前为止,为 OS/400 构建 Perl 最简单的方法是使用 PASE(可移植应用程序解决方案环境),有关更多信息,请参阅 http://www.iseries.ibm.com/developer/factory/pase/index.html 此环境允许您在编程时使用 AIX API,并提供一个运行时环境,允许 AIX 二进制文件直接在 PowerPC iSeries 上执行。
为 OS/400 PASE 构建 Perl 的推荐方法是在 AIX 下构建 Perl 5 源代码(版本 5.8.1 或更高版本)。
诀窍是在 AIX 上运行 Configure shell 脚本时提供一个特殊参数。
sh Configure -DPASE ...
PASE 下 Perl 的默认安装目录为 /QOpenSys/perl。如果需要,可以使用 Configure 参数 -Dprefix=/some/dir 修改它。
从 OS/400 V5R2 开始,IBM Visual Age 编译器在 OS/400 PASE 上受支持,因此可以在 OS/400 上本地构建 Perl。但是,更简单的方法是在 AIX 中编译,如上所述。
如果您不想将编译后的 Perl 在 AIX 中安装到 /QOpenSys(用于在复制到 PASE 之前打包它),可以使用 Configure 参数:-Dinstallprefix=/tmp/QOpenSys/perl。这将导致“make install”将所有内容安装到该目录中,而安装的文件仍然认为它们位于(将位于)/QOpenSys/perl 中。
如果在 PASE 上本地构建,请在 /QOpenSys 目录下进行构建,因为 Perl 在区分大小写的文件系统上构建时会更稳定。
如果您在 AIX 上编译,只需在 AIX 机器上执行 "make install"。安装完成后,将 /QOpenSys/perl 目录打包成 tar 文件。使用以下命令通过 FTP 将 tar 文件传输到 OS/400
> binary
> site namefmt 1
> put perl.tar /QOpenSys
将文件传输到 OS/400 后,只需打开一个 PASE shell 并解压缩 tar 文件。
如果您在 PASE 中编译,那么 "make install" 是您唯一需要做的操作。
perl 二进制文件的默认路径为 /QOpenSys/perl/bin/perl。您需要将 /QOpenSys/usr/bin/perl 链接到此文件,这样您就不必修改您的路径。
在 PASE 中的 Perl 可以像在 AIX 上使用 Perl 一样使用。
以 #!/usr/bin/perl 开头的脚本如果将 /QOpenSys/usr/bin/perl 链接到您的 perl 二进制文件,则应该可以正常工作。如果您执行了 setuid/setgid 或设置了环境变量 PASE_EXEC_QOPENSYS="N",则此方法将无法正常工作。如果您使用的是 V5R1,则需要获取最新的 PTF 才能使用此功能。以 #!/QOpenSys/perl/bin/perl 开头的脚本应该始终可以正常工作。
在 PASE 中编译时,没有 "oslevel" 命令。因此,您可能需要创建一个名为 "oslevel" 的脚本,该脚本回显您的 PASE 运行时版本支持的 AIX 版本。如果您不确定,请查阅您的文档或使用 "4.3.3.0"。
如果您的测试用例失败,请检查是否存在 spool 文件。测试用例可能试图使用 PASE 中未实现的系统调用。为了避免 SIGILL,请尝试设置 PASE_SYSCALL_NOSIGILL 环境变量或为 SIGILL 设置一个处理程序。如果您能够为 PASE 编译程序,请运行配置脚本,并在它提供选项时编辑 config.sh。如果您想删除 fchdir()(它在 V5R1 中未实现),只需更改以下行:
d_fchdir='define'
为
d_fchdir='undef'
然后编译 Perl。使用 fchdir() 的地方有针对没有 fchdir() 的系统的替代方案。
Perl 存在一个移植到 ILE 环境的版本。但是,此移植版本基于 Perl 的一个非常旧的版本,Perl 5.00502(1998 年 8 月)。(截至 2002 年 7 月,Perl 的最新版本是 5.8.0,甚至 5.6.1 也已于 2001 年 4 月发布。)如果您需要在 ILE 上运行 Perl,则可能需要此较旧的移植版本:http://www.cpan.org/ports/#os400 请注意,任何比 5.00502 更晚的 Perl 版本都没有移植到 ILE。
如果您需要在 ILE 环境中使用 Perl,您可能需要考虑使用 Qp2RunPase() 调用 PASE 版本的 Perl。
Jarkko Hietaniemi <[email protected]> Bryan Logan <[email protected]> David Larson <[email protected]>