內容

名稱

perl584delta - perl v5.8.4 的新功能

說明

此文件說明 5.8.3 發行版和 5.8.4 發行版之間的差異。

不相容的變更

已修正許多次要錯誤。依賴於先前錯誤行為的指令碼會將這些修正視為不相容的變更 :-) 建議您對此版本執行足夠的驗收測試,以確保這不會影響您,然後再將此版本投入生產。

已稍微變更 Carp 的診斷輸出,在參數之間的逗號後加入一個空格。這讓網頁瀏覽器等工具能更輕鬆地換行,但可能會混淆執行 Carp 輸出詳細剖析的任何自動化工具。

已改善內部傾印輸出,讓換行和退格等不可列印字元以 \x 符號輸出,而非八進制。這可能會混淆解析 Devel::Peek 等模組輸出的非穩健工具。

核心強化

Malloc 包裝

現在可以建置 Perl 以偵測嘗試配置異常大量的記憶體區塊。先前此類配置會在大小計算期間遭受整數換行,導致配置錯誤,造成 perl 崩潰,理論上可用於「堆疊溢位」攻擊。在我們知道可行(大多數 AIX 組態、BSDi、Darwin、DEC OSF/1、FreeBSD、HP/UX、GNU Linux、OpenBSD、Solaris、VMS 和大多數 Win32 編譯器)的平台上,包裝預設為啟用,在其他平台上則預設為停用。

Unicode 字元資料庫 4.0.1

Perl 5.8 中包含的 Unicode 字元資料庫副本已從 4.0.0 更新至 4.0.1。

suidperl 較不安全

Paul Szabo 已分析並修補 suidperl 以移除現有的已知不安全性。目前 suidperl 中沒有已知的漏洞,但過往經驗顯示我們無法確信這些是最後的漏洞。您可能無法再直接呼叫 set uid perl,因此為了保持與呼叫 #!/usr/bin/suidperl 的指令碼的向下相容性,現在唯一的 set uid 二進位檔是 sperl5.8.n(此版本為 sperl5.8.4)。suidperl 安裝為指向 perl 的硬連結;suidperlperl 都會自動呼叫 sperl5.8.4 自動設定 uid 二進位檔,因此此變更應完全透明。

對於新專案,核心 perl 團隊強烈建議您使用專門的單一用途安全性工具,例如 sudo,而非 suidperl

格式

除了錯誤修正外,格式的功能已獲得強化。請參閱 perlform

模組與實用程式

核心模組和文件中的/tmp(錯誤)使用已整理完畢。某些在 perl 核心和 CPAN 中獨立提供的模組(「雙重生命週期模組」)尚未套用這些變更;變更會在模組於 CPAN 中更新時整合到未來的穩定 perl 版本中。

已更新模組

屬性處理程式
B
基準測試
CGI
Carp
Cwd
匯出器
檔案尋找
IO
IPC::Open3
本地化文字製作
Math::BigFloat
Math::BigInt
Math::BigRat
MIME::Base64
ODBM_File
POSIX
Shell
Socket

有 Linux 抽象 Unix 域 Socket 的實驗性支援。

可儲存
切換

已與其 CPAN 版本 2.10 同步

Sys::Syslog

syslog() 現在可以使用數字常數表示設施名稱和優先順序,而不再僅限於字串。

Term::ANSIColor
Time::HiRes
Unicode::UCD
Win32

Win32.pm/Win32.xs 已從 libwin32 模組移至核心 Perl

base
open
threads

獨立執行緒現在也支援 Windows。

utf8

效能提升

公用程式變更

Perl 除錯程式(lib/perl5db.pl)現在可以儲存所有除錯程式指令以供稍後使用,並且可以顯示給定類別的父類別繼承樹狀結構。

安裝和組態改善

VMS 和 Windows 上的建置程序已進行多項小幅改善。在 Windows 上,Borland 的 C 編譯器現在可以使用 PerlIO 和/或 USE_LARGE_FILES 編譯 perl。

Windows 上的 perl.exe 現在有一個「駱駝」標誌圖示。Perl 主題使用駱駝是 O'Reilly and Associates Inc. 的商標,並經其許可使用(例如,散布原始碼、從中編譯 Windows 可執行檔,以及在本地使用該可執行檔)。明確不涵蓋將提供的駱駝用於 perl 可執行檔圖示以外的任何用途,任何希望重新散布 帶有 圖示的 perl 二進位檔的人員都應事先直接向 O'Reilly 查詢。

Perl 應再次在 Stratus VOS 上順利建置。

已選錯誤修正

修正更多 utf8 錯誤,特別是 chompchopsendsyswrite 與 utf8 資料互動的方式。當 use bytes; 在範圍內時,串接現在可以正確運作。

Pragmata 現在會正確傳播到正則表達式中的 (?{...}) 結構。例如以下程式碼

my $x = qr{ ... (??{ $x }) ... };

現在會在使用嚴格模式下(正確地)失敗。(因為內部的 $x 是且一直是指 $::x

已壓制最佳化後的布林表達式(例如 5 || print;)中常數的「常數在 void 內容中」警告。

perl -i 可能會錯誤地 fchmod(stdin)。如果 stdin 附加到終端機,而 perl 以 root 身分執行,這會很嚴重。現在已修正。

新增或變更的診斷

CarpDevel::Peek 使用的內部診斷常式已變得更清楚,如 「不相容的變更」 中所述

變更的內部

已修正雜湊內部的一些錯誤。受限雜湊及其佔位符現在會在略微不同的時間點配置和刪除,但這對使用者程式碼來說應該看不出來。

未來的方向

下一個維護版本 (5.8.5) 的程式碼凍結時間為 2004 年 6 月 30 日,預計在 7 月中旬發布。

特定平台的問題

已知此版本無法在 Windows 95 上建置。

回報錯誤

如果您發現您認為是錯誤的問題,您可以查看最近張貼到 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 檔案,提供已變更內容的詳盡詳細資料。

INSTALL 檔案,說明如何建置 Perl。

README 檔案,提供一般資訊。

ArtisticCopying 檔案,提供版權資訊。