perl5122delta - perl v5.12.2 的新功能
本文檔說明 5.12.1 版本和 5.12.2 版本之間的差異。
如果您要從較早的主要版本升級,例如 5.10.1,請先閱讀 perl5120delta,其中說明了 5.10.0 和 5.12.0 之間的差異,以及 perl5121delta,其中說明了 5.12 穩定發行系列中較早的變更。
沒有任何變更故意與 5.12.1 不相容。如果存在任何變更,它們是錯誤,歡迎回報。
除了下面列出的錯誤修正之外,此版本的核心語言不應有任何使用者可見的變更。
此版本未引入任何新的模組或實用程式。
在之前的版本中,no VERSION;
陳述式觸發了一個錯誤,可能導致 feature 套件被載入,並意外啟用 strict 模式。
Carp
從版本 1.16 升級到 1.17。
Carp 現在會偵測不完整的 caller() 覆寫,並避免使用虛假的 @DB::args
。為了提供回溯,Carp 依賴於 caller 內建函式的特定行為。Carp 現在會偵測其他程式碼是否已使用不完整的實作覆寫此函式,並相應修改其回溯。之前不完整的覆寫會導致回溯中的值不正確(最佳情況),或模糊的致命錯誤(最糟情況)
這修正了某些由模組不正確地覆寫 caller()
導致的 Bizarre copy of ARRAY
案例。
CPANPLUS
已從 CPANPLUS 0.9004
反向移植一個 cpanp-run-perl 的修補程式。這解決了 RT #55964 和 RT #57106,這兩個都與安裝使用 Module::Install::DSL
的套件時發生的錯誤有關。
File::Glob
已修正一個回歸,該回歸導致在載入 File::Glob
後找不到 CORE::GLOBAL::glob
而發生崩潰。現在,它會正確地透過 pp_glob
回退到外部 glob。
File::Copy
File::Copy::copy(FILE, DIR)
現在有文件說明。
File::Spec
已從版本 3.31 升級到 3.31_01。
已在 File::Spec::VMS
中進行了多項移植性修正:現在會將冒號視為原生檔案規格中的分隔符號;會辨識脫字符號轉義的分隔符號,以更好地處理延伸檔案規格;如果輸入目錄名稱為空,catpath()
會傳回一個空目錄,而不是目前的目錄;abs2rel()
會正確地處理 Unix 風格的輸入。
perlbug 現在會永遠讓報告者有機會變更它為他們猜測的電子郵件地址。
perlbug 在使用 -d
和 -v
選項時,不應再對未初始化的值發出警告。
現有的關於向後相容性和棄用的政策已新增到 perlpolicy,以及像 棄用 等術語的定義。
perlfunc 中的「srand」 的用法已澄清。
已重新整理 perlfunc 中的「die」 的條目,以強調它在例外處理機制中的角色。
Perl 的 INSTALL 檔案已澄清,明確說明 Perl 需要一個相容 C89 的 ANSI C 編譯器。
IO::Socket 的 getsockopt()
和 setsockopt()
已有文件說明。
alarm() 無法中斷 Windows 上的封鎖 IO 已有文件記載。
Math::TrulyRandom 自 1996 年以來尚未更新,且已不再建議用於產生亂數。
perlrun 已更新,以釐清八進位旗標對 perl 的行為。
為了解決使用者的困惑,已為 $#
和 $*
這兩個在早期 Perl 版本中移除的特殊變數建立文件。
與 Perl 核心一同發布的 perlfaq 版本已從官方 FAQ 版本更新,後者目前由 Perl 儲存庫中 git://perl5.git.perl.org/perl.git 的 briandfoy/perlfaq
分支維護。
已修正 ARM 上的 d_u32align
設定探測。
已修正使用 clang
編譯時,三元運算式中出現的「不相容的運算元類型
」錯誤。
Perl 現在會略過偵測到已掛載為 nosuid
的分割區上的 setuid File::Copy
測試。
已修正 T_PRTOBJ
預設類型映射中可能發生的區段錯誤。
已修正使用 caller() 設定 @DB::args
時可能發生的記憶體外洩。
已修正載入 XS 模組時發生的多起記憶體外洩。
unpack()
現在正確處理 %32H
和 %32u
的純量內容,修正潛在的崩潰問題。split()
會崩潰,因為堆疊上的第三個項目並非預期的正規表示式。unpack("%2H", ...)
會在堆疊上傳回解壓縮結果和檢查碼,unpack("%2u", ...)
亦同。 [GH #10257]
Perl 現在避免在 pp_require 中呼叫 free()
後使用記憶體,當時 @INC
中有 CODEREF。
已修正一個錯誤,當從 XS 解構函式呼叫「call_sv(code, G_EVAL)
」時,可能會導致「Unknown error
」訊息。
open $fh, '>' \$buffer
功能的實作現在支援 get/set magic,因此可以正確地繫結緩衝區。
pp_getc
、pp_tell
和 pp_eof
opcode 現在會在堆疊上為其傳回值保留空間,即使沒有傳入參數。
在某些條件下比對 unicode 字串時,不適當的回溯會導致「Malformed UTF-8 character (fatal)
」錯誤。此問題已不再發生。請參閱 [GH #10434]
README.aix 已更新,包含有關 XL C/C++ V11 編譯器套件的資訊。
先前使用 mingw64 x64 交叉編譯器編譯 Perl 時,Config.pm 和 Config_heavy.pl 中的 incpath
、libpth
、ldflags
、lddlflags
和 ldflags_nolargefiles
值並未正確設定,因為使用該編譯器時,include 和 lib 目錄並非位於 $(CCHOME)
的正下方。
git_version.h 現在已安裝在 VMS 上。這是 v5.12.0 中的疏忽,導致一些擴充套件無法編譯。
已修正 stat() 中的幾個記憶體外洩問題。
已修正 Perl_rename()
中因重複配置而產生的記憶體外洩問題。
已修正 vms_fid_to_name()
(realpath()
和 realname()
使用)中的記憶體外洩問題。
Perl 5.12.2 自 Perl 5.12.1 發布以來,約歷經三個月的開發,包含來自 36 位作者、橫跨 100 個檔案的約 2,000 行變更。
Perl 持續蓬勃發展邁入第三個十年,這要歸功於活躍的使用者和開發人員社群。已知下列人員為 Perl 5.12.2 的改進做出貢獻
Abigail、Ævar Arnfjörð Bjarmason、Ben Morrow、brian d foy、Brian Phillips、Chas. Owens、Chris 'BinGOs' Williams、Chris Williams、Craig A. Berry、Curtis Jewell、Dan Dascalescu、David Golden、David Mitchell、Father Chrysostomos、Florian Ragwitz、George Greer、H.Merijn Brand、Jan Dubois、Jesse Vincent、Jim Cromie、Karl Williamson、Lars Dɪᴇᴄkᴏᴡ 迪拉斯、Leon Brocard、Maik Hentsche、Matt S Trout、Nicholas Clark、Rafael Garcia-Suarez、Rainer Tammer、Ricardo Signes、Salvador Ortiz Garcia、Sisyphus、Slaven Rezic、Steffen Mueller、Tony Cook、Vincent Pit 和 Yves Orton。
如果您發現您認為是錯誤的問題,您可能會查看最近張貼到 comp.lang.perl.misc 新聞群組的文章和 http://rt.perl.org/perlbug/ 上的 perl 錯誤資料庫。您也可以在 Perl 首頁 http://www.perl.org/ 上找到相關資訊。
如果您認為您發現未回報的錯誤,請執行您版本隨附的 perlbug 程式。請務必將您的錯誤簡化成一個極小但足夠的測試案例。您的錯誤回報,連同 perl -V
的輸出,將會傳送至 perlbug@perl.org,供 Perl 移植團隊分析。
如果您回報的錯誤具有安全性影響,不適合傳送至公開封存的郵件清單,請將其傳送至 perl5-security-report@perl.org。這會指向一個封閉訂閱、未封存的郵件清單,其中包括所有核心提交者,他們將能夠協助評估問題的影響,找出解決方案,並協助協調在 Perl 支援的所有平台上發布修補程式以減輕或修正問題。請僅將此地址用於 Perl 核心中的安全性問題,而非 CPAN 上獨立發布的模組。
變更 檔案說明如何檢視變更內容的詳細資訊。
安裝 檔案說明如何建置 Perl。
一般事項的 README 檔案。
版權資訊的 Artistic 和 Copying 檔案。