perl588delta - perl v5.8.8 的新功能
本文件說明 5.8.7 版與 5.8.8 版之間的差異。
沒有任何變更刻意與 5.8.7 不相容。如果有任何變更,它們就是錯誤,歡迎回報。
chdir
、chmod
和 chown
現在可以在檔案處理程式和檔案名稱上運作,如果系統分別支援 fchdir
、fchmod
和 fchown
,感謝 Gisle Aas 提供的修補程式。
Attribute::Handlers
升級到版本 0.78_02
文件拼字錯誤修正
attrs
升級到版本 1.02
僅內部清理
autouse
升級到版本 1.05
簡化實作
B
升級到版本 1.09_01
B::
模組的繼承層級已修正;B::NV
現在繼承自 B::SV
(而非 B::IV
)。
blib
已升級至版本 1.03
文件拼字錯誤修正
ByteLoader
已升級至版本 0.06
內部清理
CGI
已升級至版本 3.15
已移除 self_url()
中多餘的「?」
已修正 scrolling_list()
的選取屬性
virtual_port
現在可與 https 協定正常運作
upload_hook()
和 append()
現在可在函式導向模式中運作
POST_MAX
不會再導致用戶端當機
自動標籤索引現在已停用,並已新增 -tabindex
pragma 以重新啟用自動索引
end_form()
不會發出空的(且無法驗證的)<div>
CGI::Carp
在某些 mod_perl 組態中運作更佳
設定 $CGI::TMPDIRECTORY
現在會生效
增強文件
charnames
已升級至版本 1.05
viacode()
現在接受十六進位字串,且已最佳化。
CPAN
已升級至版本 1.76_02
修正 Win32 的 1 個次要錯誤
Cwd
已升級至版本 3.12
Win32 上的 canonpath()
現在可以正確壓縮 foo\.. 區段。
改善 Symbian OS 上的行為。
增強文件和修正錯字
內部清理
Data::Dumper
升級至版本 2.121_08
修正 Data::Dumper
有時會更新雜湊的迭代器狀態的問題
數字標籤現在可以使用
內部清理
DB
升級至版本 1.01
修正執行偵錯器時,正規運算式引擎的狀態有時會被破壞的問題。
DB_File
升級至版本 1.814
新增對 Berkeley DB 4.4 的支援。
Devel::DProf
升級至版本 20050603.00
內部清理
Devel::Peek
升級至版本 1.03
內部清理
Devel::PPPort
升級至版本 3.06_01
已改善 --compat-version
參數檢查
預設會過濾命令列中傳遞的檔案
已新增 --nofilter
選項來覆寫過濾
增強文件
diagnostics
升級至版本 1.15
文件拼字錯誤修正
Digest
升級至版本 1.14
建構函式現在知道哪個模組實作 SHA-224
調整文件和修正錯字
Digest::MD5
升級至版本 2.36
現在使用 XSLoader
以加快載入速度
增強文件,包括最近發現的 MD5 弱點
Dumpvalue
升級至版本 1.12
修正文件
DynaLoader
已升級,但很遺憾我們無法增加其版本號 :-(
在 Win32 上實作 dl_unload_file
內部清理
整合 XSLoader
0.06;針對呼叫 bootstrap_inherit()
進行小幅最佳化,並加強文件說明。
將 Encode
升級至版本 2.12
現在可接受 CHECK
的 coderef!
新增 3 個字元至 ISO-8859-7 編碼
新增編碼 MIME-Header-ISO_2022_JP
已修正部分字元與 encoding(utf-8-strict)
的問題。
加強文件說明並修正錯字
將 English
升級至版本 1.02
已新增變數 $COMPILING
將 ExtUtils::Constant
升級至版本 0.17
改善與舊版 Perl 的相容性
將 ExtUtils::MakeMaker
升級至版本 6.30(原為 6.17)
將 File::Basename
升級至版本 2.74,並整合 Michael Schwern 提供的變更。
釐清文件說明並修正錯誤。
basename
現在會在處理名稱前移除尾端的路徑分隔符號。
basename
現在會針對參數 /
傳回 /
,以使 basename
與同名的 shell 工具程式保持一致。
如果字尾與名稱中剩餘的字元相同,則不再移除該字尾,同樣是為了與 shell 工具程式保持一致。
進行一些內部程式碼清理。
將 File::Copy
升級至版本 2.09
以前會複製檔案到檔案本身時會失敗。
現在,在檔案系統之間移動檔案時,會保留存取和修改時間戳記
File::Find
升級至 1.10 版
Win32 可攜性修正
增強文件
File::Glob
升級至 1.05 版
內部清理
File::Path
升級至 1.08 版
當 mkdir
失敗時,mkpath
現在會保留 errno
File::Spec
升級至 3.12 版
在 Win32 上,File::Spec->rootdir()
現在會傳回 \
,而非 /
$^O
有時會受到污染。此問題已修正。
Win32 上的 canonpath
現在會正確地壓縮 foo/..
(或 foo\..
) 區段,而非執行先前所執行的「誤導」工作。請注意,Unix 上的 canonpath
仍不會 壓縮這些區段,因為這樣做是不正確的。
一些文件改進
一些內部程式碼清理
FileCache
升級至 1.06 版
修正文件中的 POD 格式化錯誤
Filter::Simple
升級至 0.82 版
FindBin
升級至 1.47 版
現在在存取權限比平常更嚴格的目錄中運作得更好。
GDBM_File
升級至 1.08 版
內部清理
Getopt::Long
升級至 2.35 版
prefix_pattern
現在已由新的組態選項 long_prefix_pattern
補充,使用戶可以指定哪些前綴模式應套用長選項樣式語意。
選項現在可以一次採用多個值 (實驗性)
各種錯誤修正
if
升級至 0.05 版
在清單內容中呼叫條件時,提供更具意義的 if
錯誤訊息。
還原與早期 perl 版本的向下相容性
IO
升級至版本 1.22
增強文件
內部清理
IPC::Open2
升級至版本 1.02
增強文件
IPC::Open3
升級至版本 1.02
增強文件
List::Util
升級至版本 1.18 (原為 1.14)
修正 refaddr
的純 perl 版本,以避免祝福未祝福的參考
使用 XSLoader
以加快載入速度
修正各種記憶體外洩
內部清理和可攜性修正
Math::Complex
升級至版本 1.35
atan2(0, i)
現已可運作,所有(可計算的)複數參數案例亦同
修正 make
和 emake
中的特定錯誤
支援直接傳回第 k 次方根
在 emake
中支援 [2,-3pi/8]
在 make
/emake
中支援 inf
更明顯地說明文件 make
/emake
Math::Trig
升級至版本 1.03
新增更多大圓例程:great_circle_waypoint
和 great_circle_destination
MIME::Base64
升級至版本 3.07
使用 XSLoader
以加快載入速度
增強文件
內部清理
NDBM_File
升級至版本 1.06
增強文件
ODBM_File
升級至版本 1.06
修正文件中的拼字錯誤
內部清理
Opcode
升級至版本 1.06
增強文件
內部清理
open
升級至版本 1.05
增強文件
overload
升級至版本 1.04
增強文件
PerlIO
升級至版本 1.04
PerlIO::via
現已可正確反覆運算各層
PerlIO::scalar
現已可理解 $/ = ""
encoding(utf-8-strict)
現已可與部分字元搭配使用
增強文件
內部清理
Pod::Functions
升級至版本 1.03
修正文件中的拼字錯誤
Pod::Html
升級至 1.0504 版
HTML 輸出現在會正確連結至同一頁面的 =item
,且應為有效的 XHTML。
變數名稱會如預期般被辨識
修正文件中的拼字錯誤
Pod::Parser
升級至 1.32 版
允許第一行以 =head
開頭的檔案
Win32 可攜性修正
pod2usage
的結束狀態已修正
pod2usage
的新 -noperldoc
參數
現在允許任意 URL 範例
修正文件中的拼字錯誤
POSIX
升級至 1.09 版
修正文件中的拼字錯誤
內部清理
re
升級至 0.05 版
修正文件中的拼字錯誤
Safe
升級至 2.12 版
小幅文件增強
SDBM_File
升級至 1.05 版
修正文件中的拼字錯誤
內部清理
Socket
升級至 1.78 版
內部清理
Storable
升級至 2.15 版
這包含 Adam Kennedy 新增的 STORABLE_attach
鉤子功能,以及在 ithreads
下儲存時,透過使用 ithreads
複製追蹤碼,更省記憶體的需求。
Switch
升級至 2.10_01 版
修正文件中的拼字錯誤
Sys::Syslog
升級至 0.13 版
現在提供數字巨集和有意義的 Exporter
標籤。
不再使用 Sys::Hostname
,因為它可能會在未設定網路環境中提供無用的值,因此改直接使用 INADDR_LOOPBACK
。
syslog()
現在使用當地時間戳記。
setlogmask()
現在會像 C 對應程式一樣運作。
setlogsock()
現在會如文件所述 croak()
。
改善錯誤和警告訊息。
改善文件。
Term::ANSIColor
升級至 1.10 版
修正 colored
中的一個錯誤,當設定 $EACHLINE
時,會導致它無法為僅包含 0(字面值零)的行著色。
改善測試。
Term::ReadLine
升級至 1.02 版
文件調整
Test::Harness
升級至 2.56 版(原為 2.48 版)
Test::Harness
計時器現在預設為關閉。
現在會以毫秒顯示經過時間。
各種錯誤修正
Test::Simple
升級至 0.62 版(原為 0.54 版)
is_deeply()
不再會在許多情況下無法運作
修正各種次要錯誤
文件增強
Text::Tabs
升級至 2005.0824 版
提供 expand
的更快速實作
Text::Wrap
升級至 2005.082401 版
新增 $Text::Wrap::separator2
,讓您可以保留現有的換行符,但使用其他字串新增斷行。
threads
升級至 1.07 版
threads
現在會遵循 no warnings 'threads'
現在會在 $t->join()
之後而非 undef $t
之後釋放執行緒的直譯器,這應可修正一些 ithreads
記憶體外洩問題。(由 Dave Mitchell 修復)
修正一些文件拼字錯誤。
threads::shared
升級至 0.94 版
僅變更文件
注意:CPAN 上有 threads::shared
的改良實作 - 如果證明穩定,將會併入 5.8.9 版。
Tie::Hash
升級至 1.02 版
修正文件中的拼字錯誤
Time::HiRes
升級至 1.86 版(原為 1.66 版)
新增 clock_nanosleep()
和 clock()
函式
已新增對 POSIX clock_gettime()
和 clock_getres()
的支援
如果 C gettimeofday()
函式失敗,則傳回 undef
或空清單
改善 nanosleep
偵測
內部清理
增強文件
Unicode::Collate
升級至 0.52 版
現已實作 UCA 修訂版 14(根據 Unicode 4.1.0)
Unicode::Collate->new
方法不再覆寫使用者的 $_
增強文件
Unicode::UCD
升級至 0.24 版
修正文件中的拼字錯誤
User::grent
升級至 1.01 版
修正文件中的拼字錯誤
utf8
升級至 1.06 版
修正文件中的拼字錯誤
vmsish
升級至 1.02 版
修正文件中的拼字錯誤
warnings
升級至 1.05 版
更溫和地處理 Carp::
內部
內部清理
文件更新
Win32
升級至 0.2601 版
提供 Windows Vista 支援給 Win32::GetOSName
文件增強
XS::Typemap
升級至 0.02 版
內部清理
h2xs
增強功能h2xs
實作新的選項 --use-xsloader
以強制使用 XSLoader
,即使在向後相容的模組中也是如此。
已修正處理具有撇號的作者名稱的方式。
現在會略過任何具有負值的列舉。
perlivp
增強功能perlivp
實作新的選項 -a
,而且預設不再檢查 *.ph 檔案。使用 -a
選項來執行 所有 測試。
perlglossary 手冊頁是 Perl 文件中使用的術語的詞彙表,包括技術術語和其他術語,由 O'Reilly Media, inc. 親切提供。
在 Nicholas Clark 的協助下,弱參考建立現在是 O(1),而不是 O(n)。弱參考刪除仍為 O(n),但如果刪除只在程式結束時發生,則可以完全略過。
Salvador Fandiño 提供了改進,以減少 sort
的記憶體使用量並加速某些情況。
Jarkko Hietaniemi 和 Andy Lester 努力將 C 原始檔中的儘可能多資料標記為 static
,以增加作業系統可以在程序之間共用的可執行檔比例,並因此減少多使用者系統上的實際記憶體使用量。
平行 make 現在應該可以正常運作,儘管如果指示 make test
平行執行,可能仍會出現問題。
在 Win32 上使用 Borland 編譯器建置應該可以更順利。特別是 Steve Hay 努力避開其編譯器發出的許多警告,以及至少一個 C 編譯器內部錯誤。
多虧 Alan Burlison 的一個修補程式,Configure
現在會偵測 clearenv
和 unsetenv
。它也會探查 futimes
以及 sprintf
是否正確傳回格式化字串的長度,這兩個都會用於 perl 5.8.9。
有針對 next-3.0、vmesa、IX、Darwin、Solaris、Linux、DEC/OSF、HP-UX 和 MPE/iX 的改進提示。
多虧 Vadim Konovalov 的工作,Windows 上的 Perl 擴充套件現在可以靜態建置到 Perl DLL 中。(此改進實際上是在 5.8.7 中,但意外遺漏在 perl587delta 中)。
先前在透過 -w
全域啟用警告時,選擇性停用特定警告類別實際上會關閉所有警告。此問題現已修正;現在 no warnings 'io';
將只會關閉 io
類別中的警告。先前會錯誤地關閉所有警告。
此錯誤修正可能會導致某些程式開始正確發出警告。
Perl 5.8.4 引進了一項變更,讓將 undef
指派給純量,或將空清單指派給陣列或雜湊的動作被最佳化移除。由於這可能會在涉及 goto
跳躍時造成問題,因此已將此變更備份。
在某些特定情況下,使用 sprintf() 函數搭配某些格式可能會導致緩衝區溢位。此問題已修正,同時也修正了其他幾個錯誤,特別是在邊界檢查方面。
在相關修正中,未遵循 Sys::Syslog
文件編寫的錯誤程式碼可能會產生格式化漏洞。已變更 Sys::Syslog
以保護使用者免於品質不佳的第三方程式碼。
據報導,在處理 Unicode 資料時,在 Perl 的偵錯器下執行可能會導致意外的大幅效能下降。最可能的原因已由 Nicholas Clark 找出並修正。
FindBin
現在在存取權限比平常更嚴格的目錄中運作得更好。
已關閉 ithreads 中的幾個記憶體外洩。CPAN 上提供已改善的 threads::shared
實作,如果證明穩定,將會併入 5.8.9。
現在會從 $!
和 $^E
中移除尾端空白。
需要 Perl 讀取程序群組清單的作業,例如讀取 $(
和 $)
,現在會動態配置記憶體,而非使用固定大小的陣列。在設定為使用大量群組的系統上,固定大小的陣列可能會導致 C 堆疊耗盡。
PerlIO::scalar
現在在非預設 $/
設定下運作得更好。
現在可以使用 x
運算子重複 qw//
清單。這以前會產生語法錯誤。
偵錯器現在會正確追蹤包含 #line 指令的 eval("")uated 程式碼中的執行。
對於三個引數的開啟,不再忽略 open
實用的值。
perl 5.8.6 中引入的 for (reverse @a)
最佳化,當陣列有未定義的元素且用於 LVALUE 內容時,可能會發生錯誤。Dave Mitchell 提供了一個修正。
某些 UTF-8 編碼資料與 8 位元正規表示式之間不區分大小寫的比對,反之亦然,可能會產生格式錯誤的字元警告。這些問題已由 Dave Mitchell 和 Yves Orton 修正。
在某些情況下,lcfirst
和 ucfirst
可能會損毀字串,因為字串的小寫、大寫或標題大小寫的 UTF-8 編碼長度不同。這個問題已由 Nicholas Clark 修正。
Perl 現在會使用 C 函式庫呼叫 unsetenv
和 clearenv
(如果存在)來刪除 %ENV
的金鑰,並完全刪除 %ENV
,這要感謝 Alan Burlison 的修補程式。
這是一個新的警告,會在以下情況產生
$r = do {my @a; \$#a};
$$r = 503;
這是一個新的警告,當數字傳遞為參數到 select() 時產生,而不是位元遮罩。
# Wrong, will now warn
$rin = fileno(STDIN);
($nfound,$timeleft) = select($rout=$rin, undef, undef, $timeout);
# Should be
$rin = '';
vec($rin,fileno(STDIN),1) = 1;
($nfound,$timeleft) = select($rout=$rin, undef, undef, $timeout);
這個語法錯誤表示詞法分析器無法找到 ?PATTERN?
結構的最後分隔符號。在此錯誤訊息中提到三元運算子,可以更容易診斷語法錯誤。
C
原始碼已經過相當程度的重構,部分是為了讓它更井然有序且更容易維護。產生的物件碼和 perl
二進位檔可能比 5.8.7 小很多,特別是因為 Dave Mitchell 貢獻的變更,將警告碼重寫得更小。除了更小且可能更快之外,不應該有任何使用者可察覺的變更。
Andy Lester 提供許多改進,以確定哪些函式參數和局部變數實際上可以宣告為 const
給 C 編譯器。Steve Peters 提供新的 *_set
巨集,並重寫核心以使用這些,而不是在 LVALUE 上下文中指定給巨集。
Dave Mitchell 改進 -DT
下的詞法分析器除錯輸出
Nicholas Clark 變更字串緩衝區配置,使其現在向上捨入到 4 的下一個倍數(或在具有 64 位元指標的平台上為 8)。這應該會減少對 realloc
的呼叫次數,而不會實際使用任何額外的記憶體。
HV
的 HE*
陣列現在配置為正確(最小)大小,這要感謝 Nicholas Clark 的另一個變更。使用 -DPERL_USE_LARGE_HV_ALLOC
編譯以使用舊的、較不嚴謹的預設值。
對於 XS 或嵌入式除錯目的,如果 perl 使用 -DDEBUG_LEAKING_SCALARS_FORK_DUMP
編譯,除了 -DDEBUG_LEAKING_SCALARS
之外,則在全域毀損之前會 fork
一個子程序,用於顯示在全域毀損結束時發現已洩漏的任何標量的值。沒有這個,標量在偵測點已經被釋放,以致於無法產生任何有意義的內容傾印。此功能是由不知疲倦的 Nicholas Clark 實作,基於 Mike Giroux 的構想。
HP-UX 11.23(Itanium 2)上的最佳化器在使用 HP C-ANSI-C 時目前部分停用(縮小到 +O1);較高最佳化層級的問題原因仍不明。
VMS 上仍有少數測試失敗,大部分是因測試修正和次要模組調整,有太多相依性而無法從開發串流整合到此版本,而開發串流已修正所有問題。以下是預期失敗的清單,其中包含已知修正的補丁編號
ext/Devel/PPPort/t/ppphtest.t #26913
ext/List/Util/t/p_tainted.t #26912
lib/ExtUtils/t/PL_FILES.t #26813
lib/ExtUtils/t/basic.t #26813
t/io/fs.t
t/op/cmp.t
如果您發現您認為是錯誤的問題,您可能需要查看最近貼在 comp.lang.perl.misc 新聞群組的文章和 http://bugs.perl.org 上的 perl 錯誤資料庫。http://www.perl.org(Perl 首頁)上可能也有相關資訊。
如果您認為您有未回報的錯誤,請執行版本隨附的 perlbug 程式。務必將您的錯誤簡化成一個微小但足夠的測試案例。您的錯誤回報連同 perl -V
的輸出將會傳送到 perlbug@perl.org,供 Perl 移植團隊分析。您可以在 http://bugs.perl.org/ 瀏覽和搜尋 Perl 5 錯誤
Changes 檔案提供變更內容的詳盡資訊。
Perl 建置方式的 INSTALL 檔案。
一般資訊的 README 檔案。
著作權資訊的 Artistic 和 Copying 檔案。