內容

名稱

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 或更新版本)的方式是為 OS/400 PASE 建置 Perl。

訣竅是在 AIX 上執行 Configure shell 腳本時,給予一個特殊參數

sh Configure -DPASE ...

Perl 在 PASE 下的預設安裝目錄是 /QOpenSys/perl。如有需要,可以使用 Configure 參數 -Dprefix=/some/dir 來修改。

從 OS/400 V5R2 開始,OS/400 PASE 支援 IBM Visual Age 編譯器,因此可以在 OS/400 上原生建置 Perl。然而,較簡單的方法是在 AIX 中編譯,如前所述。

如果您不想將在 AIX 中編譯的 Perl 安裝到 /QOpenSys(在複製到 PASE 之前打包),可以使用 Configure 參數:-Dinstallprefix=/tmp/QOpenSys/perl。這將導致「make install」將所有內容安裝到該目錄中,而已安裝的檔案仍認為它們在(將會在)/QOpenSys/perl 中。

如果在 PASE 上原生建置,請在 /QOpenSys 目錄下進行建置,因為 Perl 在大小寫敏感檔案系統上建置時會比較順利。

在 OS/400 PASE 安裝 Perl

如果您在 AIX 上編譯,只需在 AIX 方塊上執行「make install」。安裝完成後,將 /QOpenSys/perl 目錄打包成 tar 檔。使用以下指令透過 FTP 將 tar 檔傳輸到 OS/400

> binary
> site namefmt 1
> put perl.tar /QOpenSys

傳輸完成後,只需開啟 PASE shell 並解壓縮 tar 檔。

如果您在 PASE 中編譯,則「make install」是您唯一需要執行的指令。

perl 二進位檔的預設路徑為 /QOpenSys/perl/bin/perl。您需要將 /QOpenSys/usr/bin/perl 連結到此檔案,這樣您就不必修改路徑。

在 OS/400 PASE 中使用 Perl

在 PASE 中使用 Perl 的方式與在 AIX 中使用 Perl 的方式相同。

如果您已將 /QOpenSys/usr/bin/perl 連結到您的 perl 二進位檔,則以 #!/usr/bin/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。如果您要移除 V5R1 中未實作的 fchdir(),只需變更顯示下列內容的行

d_fchdir='define'

d_fchdir='undef'

然後編譯 Perl。使用 fchdir() 的地方有其他選擇方案,適用於沒有 fchdir() 的系統。

Perl 在 ILE 上

有一個 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() 來呼叫 Perl 的 PASE 版本。

作者

Jarkko Hietaniemi <jhi@iki.fi> Bryan Logan <bryanlog@us.ibm.com> David Larson <larson1@us.ibm.com>