經過一年的開發,Perl程式語言的新穩定分支版本5.44正式發布。在準備新版本的過程中,大約修改了270萬行程式碼(不包括文件和自動產生的程式碼-約110萬行),涉及860個文件,共有71位開發者參與了此次開發。
5.44 分支已按照十三年前製定的固定開發計畫發布,該計畫要求每年發布一個穩定分支,每三個月發布一個次要版本。第一個次要版本 Perl 5.44.1 計劃在一個月後發布,修復了在 Perl 5.44.0 實作過程中發現的最重要錯誤。隨著 Perl 5.44 的發布,對 5.40 分支的支援也已結束;未來只有在發現關鍵安全問題時才會發布更新。實驗性 5.45 分支的開發工作已經開始,除非決定切換到 7.x 版本編號,否則該分支將成為 2027 年上半年發布的穩定版 Perl 5.46 的基礎。
關鍵變化:
- 新增了在函數簽名中使用命名參數的實驗性功能。這些參數定義了傳遞給函數的變數列表,它們不是在函數體中傳遞,而是在函數宣告期間傳遞。新功能允許以任意順序傳遞參數,使用鍵值對,語法類似於在哈希表中賦值:舊語法:`sub f { my ($x, $y) = @_; …} f(1, 2);` 簽名:`sub f ($x, $y) { … } f(1, 2);` 簽名:`sub f ($x, $y) { … } f(1, 2);` 帶有命名參數的簽名:`(sub 1);`
- 新增了在包含多個變數的 foreach 迴圈中使用別名(指向指標的指標)的實驗性支援。此功能可讓您在 foreach 迴圈中建立別名,以便在單次迴圈迭代中檢索多個值。例如,當遍歷雜湊的鍵和值時,您可以為雜湊元素建立一個別名,該別名指向一個陣列:use v5.44; use feature qw( refaliasing declared_refs ); my %hash = ( one => [1], two => [2, 2], ); forpeach; array contains: @items"; } # 在 5.44 版本之前,需要進行解引用:foreach my ( $key, $var ) ( %hash ) { say "The $key array contains: @$var"; } # 不使用實驗性的 refalias 和 declared_refs 功能:for key% $陣列包含:@{$hash{$key}}"; }
- 正規表示式現在新增了一個實驗性的「enhanced_xx」模式,允許將「/xx」修飾符與方括號內的字元類別([a-zA-Z])一起使用,以便將其拆分到多行或插入註解。例如,條件「if ($text =~ m/[a-zA-Z]/){」可以寫成:if ($text =~ m/[ a-z # 小寫字母 A-Z # 大寫字母 ]/xx) {
- 偽隨機數產生器使用 getentropy() 系統呼叫來取得支援它的系統上的熵(Linux,BSD, macOS在其他系統中,熵是透過讀取 /dev/urandom 裝置或使用時間、進程 ID 和指標值的雜湊值來獲得的。
- 添加了對 Unicode 17.0 規範的支持。
- 識別碼名稱和正規表示式群組已嚴格遵守 Unicode 規則,先前由「\w」類別覆蓋的約 160 個 Unicode 字元現已停用。例如,「\w」類涵蓋所有字母、數字和下劃線字符,現在已排除帶圓圈的拉丁字母,這些字母雖然看起來像真正的字母,但實際上並非字母。此行為變更僅影響使用「use utf8」模式的程式。
- 修正了 Perl_study_chunk (CVE-2026-8376,影響 32 位元版本) 和 S_measure_struct (CVE-2026-57432) 函數中的緩衝區溢位漏洞,以及 Regex 引擎 (CVE-2026-13221) 中溢出漏洞,以及 Regex 引擎 (CVE-2026-13221) 執行數漏洞的 16 位元正執行器則可能導致該漏洞。
- 禁止使用 goto 運算子跳到迴圈和程式碼區塊內的特定位置。此功能已於 2010 年棄用。
- 效能最佳化旨在加快整數加法、減法和乘法運算、函數簽章處理以及使用編譯時已知的字串鍵從鍵/值列表填入雜湊表的速度。
來源: opennet.ru
