內容

名稱

perl588delta - perl v5.8.8 的新功能

說明

本文件說明 5.8.7 版與 5.8.8 版之間的差異。

不相容變更

沒有任何變更刻意與 5.8.7 不相容。如果有任何變更,它們就是錯誤,歡迎回報。

核心強化

模組和實用程式

公用程式變更

h2xs 增強功能

h2xs 實作新的選項 --use-xsloader 以強制使用 XSLoader,即使在向後相容的模組中也是如此。

已修正處理具有撇號的作者名稱的方式。

現在會略過任何具有負值的列舉。

perlivp 增強功能

perlivp 實作新的選項 -a,而且預設不再檢查 *.ph 檔案。使用 -a 選項來執行 所有 測試。

新文件

perlglossary 手冊頁是 Perl 文件中使用的術語的詞彙表,包括技術術語和其他術語,由 O'Reilly Media, inc. 親切提供。

效能增強

安裝和組態改進

平行 make 現在應該可以正常運作,儘管如果指示 make test 平行執行,可能仍會出現問題。

在 Win32 上使用 Borland 編譯器建置應該可以更順利。特別是 Steve Hay 努力避開其編譯器發出的許多警告,以及至少一個 C 編譯器內部錯誤。

多虧 Alan Burlison 的一個修補程式,Configure 現在會偵測 clearenvunsetenv。它也會探查 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 中)。

選定的錯誤修正

no warnings 'category' 可與 -w 正確搭配使用

先前在透過 -w 全域啟用警告時,選擇性停用特定警告類別實際上會關閉所有警告。此問題現已修正;現在 no warnings 'io'; 將只會關閉 io 類別中的警告。先前會錯誤地關閉所有警告。

此錯誤修正可能會導致某些程式開始正確發出警告。

移除過度最佳化

Perl 5.8.4 引進了一項變更,讓將 undef 指派給純量,或將空清單指派給陣列或雜湊的動作被最佳化移除。由於這可能會在涉及 goto 跳躍時造成問題,因此已將此變更備份。

sprintf() 修正

在某些特定情況下,使用 sprintf() 函數搭配某些格式可能會導致緩衝區溢位。此問題已修正,同時也修正了其他幾個錯誤,特別是在邊界檢查方面。

在相關修正中,未遵循 Sys::Syslog 文件編寫的錯誤程式碼可能會產生格式化漏洞。已變更 Sys::Syslog 以保護使用者免於品質不佳的第三方程式碼。

偵錯器和 Unicode 效能下降

據報導,在處理 Unicode 資料時,在 Perl 的偵錯器下執行可能會導致意外的大幅效能下降。最可能的原因已由 Nicholas Clark 找出並修正。

較小的修正

新的或已變更的診斷

嘗試設定已釋放陣列的長度

這是一個新的警告,會在以下情況產生

$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 的呼叫次數,而不會實際使用任何額外的記憶體。

HVHE* 陣列現在配置為正確(最小)大小,這要感謝 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 檔案。

著作權資訊的 ArtisticCopying 檔案。