perl587delta - Perl v5.8.7 的新功能
本文件描述了 5.8.6 版本與 5.8.7 版本之間的差異。
與 5.8.6 不相容的更改沒有。
Perl 5.8 中包含的 Unicode 字元資料庫已從 4.0.1 更新為 4.1.0。請參閱 http://www.unicode.org/versions/Unicode4.1.0/#NotableChanges 以獲取重要更改的詳細資訊。
關於 suidperl
的一對利用調試代碼的漏洞已被修復。
對於新項目,核心 perl 團隊強烈建議您使用專用的、單一用途的安全工具,如 sudo
,而不是 suidperl
。
Config.pm
現在更小。Config.pm
現在約為 3K,而不是 32K,少量使用的代碼和 %Config 值按需加載。這對程序員來說是透明的,但意味著大多數代碼將節省解析和加載 29K 的腳本(例如,使用 File::Find 的代碼)。
B 升級到版本 1.09
base 升級到版本 2.07
bignum 升級到版本 0.17
bytes 升級到版本 1.02
Carp 升級到版本 1.04
CGI 升級到版本 3.10
Class::ISA 升級到版本 0.33
Data::Dumper 升級到版本 2.121_02
DB_File 升級到版本 1.811
Devel::PPPort 升級到版本 3.06
Digest 升級到版本 1.10
Encode 升級到版本 2.10
FileCache 升級到版本 1.05
File::Path 升級到版本 1.07
File::Temp 升級到版本 0.16
IO::File 升級到版本 1.11
IO::Socket 升級到版本 1.28
Math::BigInt 升級到版本 1.77
Math::BigRat 升級到版本 0.15
overload 升級到版本 1.03
PathTools 升級到版本 3.05
Pod::HTML 升級到版本 1.0503
Pod::Perldoc 升級到版本 3.14
Pod::LaTeX 升級到版本 0.58
Pod::Parser 升級到版本 1.30
Symbol 升級到版本 1.06
Term::ANSIColor 升級到版本 1.09
Test::Harness 升級到版本 2.48
Test::Simple 升級到版本 0.54
Text::Wrap 升級到版本 2001.09293,以修復 wrap() 在使用非空格分隔符時的 bug。
threads::shared 升級到版本 0.93
Time::HiRes 升級到版本 1.66
Time::Local 升級到版本 1.11
Unicode::Normalize 升級到版本 0.32
utf8 升級到版本 1.05
Win32 升級到版本 0.24,提供 Win32::GetFileVersion
find2perl
現在具有新的選項 -iname
、-path
和 -ipath
。
現在在 ithreads 克隆期間使用的內部指針映射哈希現在使用一個區域來進行內存分配。在測試中,這將 ithreads 克隆時間減少了約 10%。
Win32 的 "dmake" makefile.mk 已經更新,使其與最新版本的 dmake 兼容。
PERL_MALLOC
、DEBUG_MSTATS
、PERL_HASH_SEED_EXPLICIT
和 NO_HASH_SEED
現在應該在 Win32 的 makefiles 中正常工作。
在 Win32 上的 socket() 函數已經修復,使其能夠再次使用指定協議為 0 的傳輸提供者(意味著允許任何協議)。(這在 5.8.6 中已經損壞,通常導致使用 ICMP 套接字失敗。)
另一個關於 substr
和 UTF-8 的微妙錯誤,由於內部偏移緩存不良而引起,已經被識別並修復。
已經修復了由於正則表達式引擎加載 UTF-8 表而引起的錯誤 - 例如像 "\x{100}" =~ /[[:print:]]/
這樣的代碼將不再產生損壞的結果。
對於長 Unicode 字符串的大小寫轉換操作(如 uc
)可能會耗盡內存。這已經被修復。
index
/rindex
對於某些組合的 Unicode 和非 Unicode 數據存在錯誤。這已經被修復。
read
(應該是 sysread
)將從面向字節的文件句柄讀入 UTF-8 純量時,會暴露 UTF-8 內部。這已經被修復。
幾個 pack
/unpack
錯誤修復
使用 b
或 B
格式的校驗和已經損壞。
unpack
校驗和在 C
格式時可能溢出。
U0
和 C0
現在只限於 ()
pack
子模板。
計數長度前綴現在不會改變 C0
/U0
模式。
pack
Z0
以前會破壞前面的字符。
P
/p
pack
格式以前只會識別文字的 undef
使用 closures 與 ithreads 可能會導致 perl 崩潰。這是由於未能正確鎖定內部 OP 結構所致,已經修復。
close
的返回值現在正確反映了在刷新句柄數據時發生的任何文件錯誤,而不僅僅是在實際的底層文件關閉操作失敗時給出失敗。
not() || 1
以前會導致分段錯誤。現在 not()
的行為類似於 not(0)
,這是 5.6.0 之前的行為。
h2ph
已經增強以應對以前導致產生不正確或無效輸出的標頭文件中的結構。
新增了一個新的污染錯誤,"%ENV 被別名為 %s"。當啟用污染檢查並且已將 *ENV 別名,以致於 %ENV 不再具有環境魔術,因此無法驗證為不受污染時,將拋出此錯誤。
pack
和 unpack
的內部已更新。所有合法的模板應該像以前一樣工作,但在複雜失敗案例的錯誤報告中可能會有一些變化。對於非錯誤案例的任何行為變化都是錯誤,應該進行報告。
C
源代碼經過了相當多的重構,部分是為了使其更整潔和更易於維護。生成的目標代碼和 perl
二進制文件可能比 5.8.6 要小,希望在某些情況下速度更快,但除此之外,不應該有用戶可檢測到的變化。
新增了 ${^UTF8LOCALE}
以便 perl 空間訪問 PL_utf8locale
。
用於分配 SV 頭和大多數 SV 主體的區域的大小現在可以在編譯時更改。舊的大小為 1008 字節,新的默認大小為 4080 字節。
從重載運算符返回的 Unicode 字符串可能存在錯誤。這是自 5.8.6 發布以來報告的一個長期存在的問題,但我們尚未找到合適的修復方法。
在 UNICOS 上,lib/Math/BigInt/t/bigintc.t 會使 CPU 高占用。ext/B/t/bytecode.t 和 ext/Socket/t/socketpair.t 兩者都無法通過測試。這些問題不太可能解決,因為我們勇敢的 UNICOS 移植者的最後一台 Cray 即將退役。
如果您發現了您認為是錯誤的問題,您可以檢查最近發表在 comp.lang.perl.misc 新聞組和 perl bug 數據庫(http://bugs.perl.org)上的文章。Perl 主頁(http://www.perl.org)上可能還有信息。
如果您認為您有一個未報告的錯誤,請運行隨附您版本的 perlbug 程序。請確保將您的錯誤縮小到一個足夠小但足夠的測試案例。您的錯誤報告以及 perl -V
的輸出將被發送到 perlbug@perl.org 以供 Perl 移植團隊分析。您可以在 http://bugs.perl.org/ 上瀏覽和搜索 Perl 5 的錯誤。
詳細的更改信息請參見 Changes 文件。
關於如何建置 Perl 的 INSTALL 檔案。
一般資訊的 README 檔案。
版權資訊的 Artistic 和 Copying 檔案。