perl5221delta - perl v5.22.1 的新功能
本文件說明 5.22.0 版本和 5.22.1 版本之間的差異。
如果您要從較早版本(例如 5.20.0)升級,請先閱讀 perl5220delta,其中說明了 5.20.0 和 5.22.0 之間的差異。
除了以下單一例外,沒有任何變更與 5.20.0 故意不兼容,我們認為這是明智的變更,以便在人們決定它們在 Perl 5.22.0 實作中毫無價值,並在未來避免它們之前,讓新的 \b{wb}
和(特別是)\b{sb}
功能正常運作。如果還有其他變更,它們就是錯誤,我們要求您提交報告。請參閱以下的 "回報錯誤"。
已使用 Perl 5.22 中引入的邊界檢查建構函式(\b{gcb}
、\b{sb}
、\b{wb}
、\B{gcb}
、\B{sb}
和 \B{wb}
)修復了多個錯誤,包括分段錯誤。現在所有 \B{}
都會比對空字串;而 \b{}
則不會。[GH #14976]
Module::CoreList 已從版本 5.20150520 升級到 5.20151213。
PerlIO::scalar 已從版本 0.22 升級到 0.23。
POSIX 已從版本 1.53 升級到 1.53_01。
如果將 $!
作為引數傳遞給 POSIX::strerror
,則會意外清除 $!
。此問題已修復。[GH #14951]
Storable 已從版本 2.53 升級到 2.53_01。
warnings 已從版本 1.32 升級到 1.34。
warnings::enabled
範例現在實際上使用 warnings::enabled
。[GH #14905]
Win32 已從版本 0.51 升級到 0.52。
這已更新至 Windows 8.1、10 和 2012 R2 Server。
已釐清 FIRSTKEY
和 NEXTKEY
的用法。
$!{E...}
的特定真值現在已記錄在案,並註明它可能會變更,且不保證。
已對診斷輸出(包括警告和致命錯誤訊息)進行下列新增或變更。如需診斷訊息的完整清單,請參閱 perldiag。
printf
和 sprintf
內建函式現在會更小心發出的警告:在所有情況下,重新排列引數現在會停用「重複引數」警告。[GH #14772]
使用 NO_HASH_SEED
定義搭配預設雜湊演算法 PERL_HASH_FUNC_ONE_AT_A_TIME_HARD
會導致編譯直譯器時出現致命錯誤,自 Perl 5.17.10 以來皆是如此。此問題已修正。
在 Perl 5.22.0 中,使用包含引號的 ccflags 進行組態(例如 -Accflags='-DAPPLLIB_EXP=\"/usr/libperl\"'
)會中斷,但現在已再次修正。 [GH #14732]
在某些情況下,IRIX stdio fgetc() 和 fread() 會將 errno 設為 ENOENT
,這根據 IRIX 或 POSIX 文件都沒有道理。現在會在這種情況下清除 Errno。 [GH #14557]
將長雙精度乘以無限大時出現的問題已修正。 [GH #14993]
現在所有測試都可以在使用預設建置組態的 IRIX 上通過。
qr/(?[ () ])/
不再會造成區段錯誤,而是會顯示語法錯誤訊息。 [GH #14851]
常規表示式所有格量詞 Perl 5.20 回歸現在已修正。qr/
PAT{
min,max}+
/
應與 qr/(?>
PAT{
min,max})/
產生相同的行為。自 Perl 5.20 以來,如果 min 和 max 相等,此功能便無法運作。 [GH #14857]
常規表示式字元類別 "Extended Bracketed Character Classes" in perlrecharclass 中的某些語法錯誤會造成恐慌,而不是顯示正確的錯誤訊息。此問題已修正。 [GH #15016]
BEGIN <>
不再會造成區段錯誤,並會正確產生錯誤訊息。 [GH #13546]
已修正 Perl 5.20 中的一個回歸,其中常規表示式模式內 (?[...])
建構中的一些語法錯誤會造成區段錯誤,而不是顯示正確的錯誤訊息。 [GH #14933]
已修正 (?[...])
建構中的另一個問題,其中像 \c]
之類的內容會造成恐慌。 [GH #14934]
在 Perl 5.22.0 中,解析 -C 選項的數字參數時邏輯已變更,因此如果解析至參數結尾,成功解析的數字不會儲存為選項值。 [GH #14748]
現在在倒帶堆疊時會忽略警告致命性。當現在的致命錯誤也導致堆疊倒帶時,這可以防止無限遞迴。 [GH #14319]
已修正 %::=(); J->${\"::"}
導致的崩潰。 [GH #14790]
自 Perl 5.20.0 以來,例如 /.{1}??/
等巢狀量詞會導致 perl 擲出致命錯誤,但一直被靜默接受。這已修正。 [GH #14960]
自 Perl 5.18.0 以來,例如 /(?i/
等正規表示式順序(以及其他已識別的標記或標記組合)會導致 perl 擲出致命錯誤,但一直被靜默接受。這已修正。 [GH #14931]
十六進位浮點文字支援中的錯誤表示,在小數部分中有太多尾數零導致尾數溢位時,可能會遺失高階位元。這已修正。 [GH #15032]
另一個十六進位浮點錯誤,導致在尾數的最後一個十六進位數位有跨越尾數允許位元數限制的位元時,會遺失低階位元,也已修正。 [GH #15033]
已修正其他十六進位浮點錯誤:在某些情況下,%a
格式指定符可能會遺失負零的符號、無法在小數點後以請求的精度顯示零,甚至完全遺失最左邊十六進位數位後的小數點。
已修正 /(?[ ])/
(例如 /(?[[0]+()+])/
)中不完整表達式導致的崩潰。 [GH #15045]
Perl 5.22.1 代表自 Perl 5.22.0 以來約 6 個月的開發,包含來自 27 位作者的 130 個檔案中約 19,000 行的變更。
不包括自動產生的檔案、文件和發行工具,約有 1,700 行變更到 44 個 .pm、.t、.c 和 .h 檔案。
Perl 在第三個十年中持續蓬勃發展,這要歸功於活躍的使用者和開發人員社群。已知以下人員貢獻了成為 Perl 5.22.1 的改進
Aaron Crane、Abigail、Andy Broad、Aristotle Pagaltzis、Chase Whitener、Chris 'BinGOs' Williams、Craig A. Berry、Daniel Dragan、David Mitchell、Father Chrysostomos、Herbert Breunung、Hugo van der Sanden、James E Keenan、Jan Dubois、Jarkko Hietaniemi、Karen Etheridge、Karl Williamson、Lukas Mai、Matthew Horsfall、Peter Martini、Rafael Garcia-Suarez、Ricardo Signes、Shlomi Fish、Sisyphus、Steve Hay、Tony Cook、Victor Adam。
以上清單幾乎可以確定不完整,因為它是從版本控制記錄中自動產生的。特別是,它不包括向 Perl 錯誤追蹤器報告問題的(非常感謝)貢獻者的姓名。
此版本中包含的許多變更源自於 Perl 核心包含的 CPAN 模組。我們感謝整個 CPAN 社群協助 Perl 蓬勃發展。
若要取得 Perl 所有歷史貢獻者的更完整清單,請參閱 Perl 原始碼發行版中的 AUTHORS 檔案。
如果您發現您認為是錯誤的內容,您可能會查看最近張貼到 comp.lang.perl.misc 新聞群組的文章和 https://rt.perl.org/ 中的 perl 錯誤資料庫。Perl 首頁 http://www.perl.org/ 中也可能有資訊。
如果您相信您有一個未回報的錯誤,請執行您的發行版中包含的 perlbug 程式。務必將您的錯誤精簡成一個微小但足夠的測試案例。您的錯誤報告,連同 perl -V
的輸出,將會傳送至 perlbug@perl.org,由 Perl 移植團隊分析。
如果您回報的錯誤有安全影響,不適合傳送至公開封存的郵件清單,請將其傳送至 perl5-security-report@perl.org。這指向一個封閉的訂閱未封存的郵件清單,其中包含所有核心提交者,他們將能夠協助評估問題的影響、找出解決方案,並協助協調在 Perl 受支援的所有平台上發布修正程式以減輕或修復問題。請僅將此地址用於 Perl 核心的安全問題,而不是用於在 CPAN 上獨立發布的模組。
Changes 檔案,說明如何查看已變更內容的詳盡詳細資料。
INSTALL 檔案,說明如何建置 Perl。
README 檔案,說明一般事項。
Artistic 和 Copying 檔案,說明著作權資訊。