目錄

名稱

perl5340delta - perl v5.34.0 的新增功能

說明

本文件說明 5.32.0 版和 5.34.0 版之間的差異。

如果您要從較早的版本(例如 5.30.0)升級,請先閱讀 perl5320delta,其中說明 5.30.0 和 5.32.0 之間的差異。

核心強化功能

實驗性 Try/Catch 語法

已新增提供 try/catch 符號的初步實驗性嘗試。

use feature 'try';

try {
    a_function();
}
catch ($e) {
    warn "An error occurred: $e";
}

如需更多資訊,請參閱 "perlsyn 中的 Try Catch 例外處理"

現在接受 qr/{,n}/

現在接受正規表示式量化詞的空下界,例如 m/x{,3}/ 表示 m/x{0,3}/

允許在花括號內但鄰近花括號處自由使用空白

(在雙引號內容和正規表示式模式中)

這表示您可以撰寫像 \x{ FFFC } 這樣的內容(如果您喜歡的話)。這適用於所有此類建構,即 \b{}\g{}\k{}\N{}\o{}\x{};以及正規表示式量化詞 {m,n}\p{}\P{} 保留其既有、更寬鬆的規則,這是 Unicode 標準強制規定的(請參閱 "perluniprops 中可透過 \p{} 和 \P{} 存取的屬性")。

此功能會在不論正規表示式模式修改器 /x 是否存在的情況下生效。

此外,正規表示式括弧量化詞中的逗號可以在逗號前後有空白(標籤或空格),例如 qr/a{ 5, 7 }/

新八進制語法 0oddddd

現在可以使用 0o 前綴指定八進制文字,例如 0o123_456,平行於指定十六進制文字 0xddddd 和二進制文字 0bddddd 的現有結構。此外,內建 oct() 函數現在接受此新語法。

請參閱 "perldata 中的「純量值建構函數」"perlfunc 中的 oct EXPR"

效能增強

模組和實用程式

新模組和實用程式

已更新的模組和實用程式

文件

新文件

perldocstyle

此文件為 Perl 附帶文件撰寫和維護指南。

perlgov

此文件說明 Perl 新治理模式的目標、範圍、系統和規則。

其他 pod 檔案(最顯著的是 perlpolicy)已修正以反映其採用。

現有文件的變更

我們已嘗試更新文件以反映此文件中列出的變更。如果您發現我們遺漏任何變更,請在 https://github.com/Perl/perl5/issues 開啟問題。

此外,已進行下列選定的變更

perlapi

perlcommunity

perldebguts

perldiag

perlfaq

perlfunc

perlgit

perlguts

perlop

perlpacktut

perlsyn

perlunifaq

診斷

以下新增或變更已套用於診斷輸出,包括警告和致命錯誤訊息。如需診斷訊息的完整清單,請參閱 perldiag

新的診斷

新的錯誤

新的警告

對現有診斷的變更

實用程式變更

perl5db.pl(除錯器)

組態和編譯

測試

已新增和變更測試,以反映此版本中的其他新增和變更。此外,已進行下列重大變更

平台支援

新平台

9front

允許在 i386 9front 系統(plan9 的分支)上建置 Perl。

已更新平台

Plan9

改善在 i386 平台上對 Plan9 的支援。

MacOS (Darwin)

darwin 的提示檔案已更新,以處理 10 之後的未來 MacOS 版本。[GH #17946]

已終止平台

Symbian

已移除與 Symbian 相關的支援程式碼。Symbian 是行動裝置作業系統。此移植最後更新於 2009 年 7 月,而平台本身最後更新於 2012 年 10 月。

特定平台注意事項

DragonFlyBSD

已更新測試以解決 DragonFlyBSD 中 tc*() 函式ctime 更新 的錯誤。

Mac OS X

許多系統函式庫在 Big Sur 上不再以實際檔案存在,即使 dlopen 會假裝它們存在,所以現在如果找不到函式庫檔案,我們會回退到 dlopen。[GH #18407]

Windows

由於 Windows 中的錯誤,當主控台的代碼頁設定為 65001(UTF-8)時,從主控台讀取非 ASCII 字元會中斷。已實作解決此問題的解決方法。[GH #18701]

使用 mingw.org 編譯器(版本 3.4.5 或更新版本)搭配 mingw 執行時期版本 < 3.22 現在又可以正常運作。這在 Perl 5.31.4 中中斷。

使用 mingw.org 編譯器(版本 3.4.5 或更新版本)搭配 mingw 執行時間版本 >= 3.21 現在可以運作(適用於版本 5.3.0 以前的編譯器)。

Makefile.mk,以及對 dmake 的支援,已被移除。使用 nmake (Makefile) 和 GNU make (GNUmakefile) 仍然可以在 Windows 上建置 Perl。[GH #18511]

perl 現在可以使用 gcc 的 mingw-w64 埠(32 位元和 64 位元)在 MS Windows 上搭配 USE_QUADMATH 建置。[GH #18465]

pl2bat.pl 工具現在需要 use ExtUtils::PL2Bat。這可能會導致並行建置失敗。

Windows 現在支援 symlink()readlink(),而 lstat() 不再是 stat() 的別名。[GH #18005]

與 POSIX 系統不同,在 Windows 上建立符號連結需要提升的權限或啟用開發人員模式的 Windows 10 1703 或更新版本。

stat()(包括 stat FILEHANDLE)和 lstat() 現在使用我們自己的實作,會填入傳回的裝置 dev 和 inode 號碼 ino,而不是總是傳回 0。連結數 nlink 欄位現在總是會填入。

${^WIN32_SLOPPY_STAT} 以前控制是否填入 nlink 欄位,需要額外的 Windows API 呼叫才能擷取,因為 nlinkstat() 所需的其他資訊現在會在單一 API 呼叫中擷取。

-r-w 算子現在會為 STDINSTDOUTSTDERR 句柄傳回 true。遺憾的是,它仍然不會為這些句柄的複本傳回 true。[GH #8502]

stat() 和 lstat() 傳回的時間不再會在夏令時間調整時出錯。[GH #6080]

檔案句柄上的 -x 現在應該會與 Vista 或更新版本上對應檔案名稱的 -x 相符。[GH #4145]

-e '"' 不再會錯誤地傳回 true。[GH #12431]

Visual C++ 和 gcc 建置現在使用相同的清單。

先前,MSVC 編譯使用 /manifestdependency 旗標,而非內嵌 perlexe.manifest,這會導致問題,例如 GetVersionEx() 在 Windows 10 上傳回錯誤的版本號碼。

z/OS

現在識別區域設定類別 LC_SYNTAXLC_TOD。Perl 除了允許您指定這些類別外,不會對它們做任何事。它們包含在 LC_ALL 中。

內部變更

已選 Bug 修復

已知問題

先前版本的勘誤表

訃聞

Kent Fredric (KENTNL) 於 2021 年 2 月過世。Kent 是紐西蘭人,自稱「超級怪咖」,他撰寫或維護了 178 個 CPAN 套件,是 Gentoo Linux 套件的 Perl 維護者,並為 Perl 核心套件做出貢獻。他的家人、朋友和全球的開源軟體社群都為他感到哀悼。

致謝

Perl 5.34.0 代表自 Perl 5.32.0 以來約 11 個月的開發時間,並包含來自 78 位作者、橫跨 2,100 個檔案的約 280,000 行變更。

排除自動產生的檔案、文件和發行工具,約有 150,000 行變更套用在 1,300 個 .pm、.t、.c 和 .h 檔案中。

Perl 持續在第四個十年蓬勃發展,這要歸功於活躍的使用者和開發人員社群。已知以下人員為 Perl 5.34.0 的改進做出貢獻

Aaron Crane、Adam Hartley、Andy Dougherty、Ben Cornett、Branislav Zahradník、brian d foy、Chris 'BinGOs' Williams、Christian Walde (Mithaldu)、Craig A. Berry、Dagfinn Ilmari Mannsåker、Dan Book、Daniel Böhmer、Daniel Laügt、Dan Kogai、David Cantrell、David Mitchell、Dominic Hamon、E. Choroba、Ed J、Eric Herman、Eugene Alvin Villar、Felipe Gasper、Giovanni Tataranni、Graham Knop、Graham Ollis、Hauke D、H.Merijn Brand、Hugo van der Sanden、Ichinose Shogo、Ivan Baidakou、Jae Bradley、James E Keenan、Jason McIntosh、jkahrman、John Karr、John Lightsey、Kang-min Liu、Karen Etheridge、Karl Williamson、Keith Thompson、Leon Timmermans、Marc Reisner、Marcus Holland-Moritz、Max Maischein、Michael G Schwern、Nicholas Clark、Nicolas R.、Paul Evans、Petr Písař、raiph、Renee Baecker、Ricardo Signes、Richard Leach、Romano、Ryan Voots、Samanta Navarro、Samuel Thibault、Sawyer X、Scott Baker、Sergey Poznyakoff、Sevan Janiyan、Shirakata Kentaro、Shlomi Fish、Sisyphus、Sizhe Zhao、Steve Hay、TAKAI Kousuke、Thibault Duponchelle、Todd Rinaldo、Tomasz Konojacki、Tom Hukins、Tom Stellard、Tony Cook、vividsnow、Yves Orton、Zakariyya Mughal、Михаил Козачков。

以上清單幾乎肯定不完整,因為它是從版本控制記錄自動產生的。特別是,它不包括向 Perl 錯誤追蹤器報告問題的(非常感謝的)貢獻者的姓名。

這個版本中包含的許多變更始於 Perl 核心包含的 CPAN 模組。我們感謝整個 CPAN 社群協助 Perl 蓬勃發展。

如需更完整的 Perl 所有歷史貢獻者清單,請參閱 Perl 原始碼發行中的 AUTHORS 檔案。

回報錯誤

如果您發現您認為是錯誤的地方,您可以在 https://github.com/Perl/perl5/issues 檢查 perl 錯誤資料庫。Perl 首頁 http://www.perl.org/ 上也可能會有相關資訊。

如果您認為您有一個未報告的錯誤,請在 https://github.com/Perl/perl5/issues 開啟一個問題。務必將您的錯誤精簡成一個小但足夠的測試案例。

如果您報告的錯誤具有安全性影響,不適合發送到公開問題追蹤器,請參閱 perlsec 中的「安全性漏洞聯絡資訊」,了解如何報告問題的詳細資訊。

感謝

如果您希望感謝 Perl 5 Porters 我們在 Perl 5 中所做的工作,您可以透過執行 perlthanks 程式來表達感謝。

perlthanks

這將會傳送一封電子郵件到 Perl 5 Porters 清單,表達您的感謝。

另請參閱

Changes 檔案,說明如何檢視已變更內容的詳盡詳細資料。

INSTALL 檔案,說明如何建置 Perl。

README 檔案,說明一般事項。

ArtisticCopying 檔案,說明版權資訊。