perl5120delta - Perl v5.12.0的新功能
此文件描述了5.10.0版本和5.12.0版本之間的差異。
5.12.0中的許多錯誤修正已經包含在5.10.1維護版本中。
您可以在5.10.1版本的發布說明中看到這些變更的列表(perl5101delta)。
package NAME VERSION
語法這種新語法允許模塊作者在聲明名稱空間時設置命名空間的$VERSION。它消除了our $VERSION = ...
和類似構造的需要。例如:
package Foo::Bar 1.23;
# $Foo::Bar::VERSION == 1.23
這有幾個優點
$VERSION
的解析方式與use NAME VERSION
完全相同
$VERSION
在編譯時設置
$VERSION
是一個版本對象,提供了比較運算符的適當重載,因此將$VERSION
與十進制(1.23)或點分十進制(v1.2.3)版本號進行比較可以正確工作。
消除了$VERSION = ...
和eval $VERSION
的混亂
由於它要求版本是數字字面量或v-string字面量,因此它可以被工具鏈模塊靜態解析,而不需要像MM->parse_version那樣使用eval
來解析$VERSION = ...
它不會破壞只有package NAME
的舊代碼,但是使用package NAME VERSION
的代碼將需要限制為perl 5.12.0或更新版本,這類似於從兩個參數到三個參數的open
的更改。需要最新Perl的用戶將受益,也許幾年後,它將成為一種標準做法。
然而,package NAME VERSION
需要一種新的“嚴格”版本號格式。有關詳細信息,請參見“版本號格式”。
添加了一個新的運算符,...
,暱稱為Yada Yada運算符。它旨在標記尚未實現的佔位代碼。請參見perlop中的“Yada Yada Operator”。
使用版本號大於或等於 5.11.0 的 use VERSION
語法將在語法上啟用嚴格模式,就像 use strict
會做的一樣(除了啟用功能)。以下
use 5.12.0;
表示
use strict;
use feature ':5.12';
Perl 5.12 附帶 Unicode 5.2,這是我們在發行時可用的最新版本。此版本的 Unicode 於 2009 年 10 月發布。有關此標準版本的更多詳細信息,請參閱 http://www.unicode.org/versions/Unicode5.2.0。有關安裝和使用其他版本的 Unicode 的說明,請參閱 perlunicode。
此外,Perl 的開發人員已大幅改進了 Perl 的 Unicode 實現。有關詳細信息,請參閱下面的 "Unicode 大修"。
Perl 的核心與時間相關的功能現在已符合 Y2038。 (對你可能不意味著太多,但你的孩子會喜歡的!)
現在可以過載 qr//
運算子,即轉換為正則表達式,就像已經可以過載對象的布爾值、字符串或數字轉換一樣。當對象出現在 =~
運算符的右邊時,或者當它被插入到正則表達式中時,將調用它。參見 overload。
擴展模塊現在可以清晰地鉤入 Perl 解析器,以定義新類型的以關鍵詞為首的表達式和復合語句。關鍵詞後面的語法完全由擴展定義。這允許完全非 Perl 子語言在內聯中進行解析,並生成正確的操作。
有關機制,請參見 Perl 核心源代碼發行版中的 "perlapi 中的 PL_keyword_plugin"。 Perl 核心源分發還包括一個新模塊 XS::APItest::KeywordRPN,它通過可插拔關鍵詞實現了逆波蘭表示法算術。該模塊主要用於測試目的,通常不安裝,但也作為如何使用新機制的示例。
Perl 的開發人員認為此功能是實驗性的。我們可能會在 Perl 5.14 中刪除它或以不向後兼容的方式更改它。
現在語法分析器的最底層和部分 pad 系統都提供了供 XS 擴展使用的 C API。這些API對於支持可插入關鍵字的正確使用是必要的,但也有其他用途。這些新的API是實驗性的,僅涵蓋了應該完全利用核心功能所需的一小部分。預計 Perl 5.13 開發週期將增加一系列清潔、受支持的介面。
Perl 的開發人員認為此功能是實驗性的。我們可能會在 Perl 5.14 中刪除它或以不向後兼容的方式更改它。
當擴展模組掛鉤創建 rv2cv ops 以修改子程序查找過程時,現在對於裸字子程序呼叫可以正確工作。這意味著以這種方式引用的子程序的原型將被正確處理。(先前,裸字子程序名稱首先是通過一種不可鉤住的機制進行解析,因此擴展只能正確影響出現帶有 &
符號的子程序名稱。)
從 Perl 5.12.0 開始,提供了一個新的介面,用於插入和使用除了默認的線性深度優先搜索之外的方法解析順序。在 Perl 5.10.0 中添加的 C3 方法解析順序已被重新實現為一個插件,而不會更改其 Perl 空間介面。有關更多信息,請參見 perlmroapi。
\N
實驗性正則表達式逃脫Perl 現在支持 \N
,這是一個新的正則表達式逃脫,您可以將其視為 \n
的反向。它將匹配任何不是換行符的字符,與單行匹配修飾符 /s
的存在或缺失無關。它不能在字符類中使用。 \N{3}
表示匹配 3 個非換行符;\N{5,}
表示至少匹配 5 個。 \N{NAME}
仍然表示名為 NAME
的字符或序列,但 NAME
現在不能是像 3
或 5,
這樣的東西。
這將破壞一個 自定義字符名轉換器,該轉換器允許使用數字作為字符名,因為現在 \N{3}
將意味著匹配 3 個非換行字符,而不是其名稱為 3
的字符。(Unicode 標準定義的名稱不包含數字,因此只有自定義轉換器可能受到影響。)
Perl的開發者對現有的\N{...}
結構可能導致用戶混淆感到有些擔憂,該結構通過其Unicode名稱匹配字符。因此,這個功能是實驗性的。我們可能會在Perl 5.14中刪除它或以不兼容的方式進行更改。
Perl現在對DTrace提供了一些支援。請參見《INSTALL》中的“DTrace支援”。
configure_requires
CPAN
和CPANPLUS
現在都支援最近的CPAN發行版中包含的META.yml元數據文件中的configure_requires
關鍵字。這允許發行版作者在運行Makefile.PL或Build.PL之前指定必須安裝的配置前提條件。
有關在為CPAN創建發行版時如何指定configure_requires
的詳細信息,請參見ExtUtils::MakeMaker
或Module::Build
的文檔。
each
、keys
、values
現在更靈活each
、keys
、values
函數現在可以操作於數組上。
when
作為一個語句修改器when
現在可以被用作一個語句修改器。
$,
的靈活性變量$,
現在可以被綁定。
//現在在when子句中的行為類似於||
您現在可以從PERL5OPT
環境變量設置-W
。
delete local
delete local
現在允許您在本地刪除哈希條目。
抽象命名空間套接字是Linux特有的套接字類型,位於AF_UNIX家族中,稍微濫用它以能夠使用任意字符數組作為地址:它們以空字節開頭,並且不以空字節結尾,而是以傳遞給socket()系統調用的長度結尾。
現在已經移除對 substr 參數的 32 位元限制。系統的有符號和無符號整數現在都可用於 pos 和 len 參數。
多年來,Perl 的開發人員出於各種原因棄用了許多語言功能。Perl 現在默認發出警告,如果使用了棄用的語言功能。Perl 現在警告您有關的棄用已經存在多年。您可以在發行版的 perl5xxdelta.pod 檔案中找到每個發行版中棄用的內容清單。
要在特定詞法範圍內禁用此功能,您應該使用 no warnings 'deprecated'; 有關棄用的語言功能及各種棄用警告的解釋,請參閱 perldiag。參見下面的 "棄用" 部分,以查看 Perl 開發人員作為此發行版的一部分棄用的功能和模組清單。
可接受的版本號碼格式已經正式化為 "strict" 和 "lax" 規則。package NAME VERSION 採用嚴格的版本號碼。UNIVERSAL::VERSION 和 version 物件建構函式採用寬鬆的版本號碼。提供無效版本將導致致命錯誤。use NAME VERSION 中的版本參數首先解析為數字字面值或 v-字串,然後傳遞給 UNIVERSAL::VERSION(然後必須通過 "lax" 格式測試)。
這些格式在 version 模組中有完整的文件。初步估計,"strict" 版本號碼是一個沒有指數或至少三個組件的小數位數(整數或小數分數)的正數,否則是具有前導 'v' 字元並且至少具有三個組件的點分十進位 v-字串。 "lax" 版本號允許少於三個組件或沒有前導 'v' 的 v-字串。根據 "lax" 規則,小數位數和點分十進位版本可能在小數或點分十進位組件之後通過底線字符分隔的 "alpha" 組件之後具有後綴 "alpha" 組件。
version 模組添加了 version::is_strict 和 version::is_lax 函式來根據這些規則檢查純量。
在 @INC
中,ARCHLIB
和 PRIVLIB
現在會在目前版本的 site_perl
和 vendor_perl
之後出現。安裝到 site_perl
和 vendor_perl
中的模組將優先於安裝在 ARCHLIB
和 PRIVLIB
中的模組被載入。
在內部,Perl 現在將編譯後的正則運算式(例如使用 qr//
創建的那些)視為第一類實體。需要序列化、反序列化或以其他方式與 Perl 內部數據結構進行深度交互的 Perl 模組需要根據這一變化進行更新。截至本文撰寫時,大多數受影響的 CPAN 模組已經更新。
與 Perl 5.10.0 相比,given
/when
switch 陳述式現在更好地處理複雜的陳述式(這些增強功能也適用於 5.10.1 和後續的 5.10 版本)。現在有兩種新情況,其中 when
現在將其參數解釋為布林值,而不是要用於智能匹配的表達式。
..
和 ...
翻轉範圍運算符現在在布林上下文中進行評估,遵循它們的通常語義;請參見 "Range Operators" in perlop。
請注意,與 perl 5.10.0 一樣,when (1..10)
將無法用於測試給定值是否為介於 1 和 10 之間的整數;您應該改用 when ([1..10])
(注意陣列引用)。
然而,與 5.10.0 相反,在布林上下文中評估翻轉範圍運算符確保它現在可以在 when()
中發揮作用,特別是用於實現雙穩態條件,如下所示
when (/^=begin/ .. /^=end/) {
# do something
}
涉及 defined-or 運算符的復合表達式,如 when (expr1 // expr2)
,如果第一個表達式是布林值,則將其視為布林。 (這只是將適用於常規或運算符的現有規則擴展,如 when (expr1 || expr2)
。)
自 Perl 5.10.0 開始,Perl 的開發人員已對智能匹配運算子進行了多項更改。當然,這些更改也會改變智能匹配隱含使用的 switch 陳述式的行為。這些更改也適用於 5.10.1 版本,並將保留在隨後的 5.10 版本中。
智能匹配運算子 ~~
不再是交換律的。現在,智能匹配的行為主要取決於其右手參數的類型。此外,在幾種情況下,其語義已經調整以提供更一致或更有用的功能。雖然保留了一般的向後兼容性,但仍需要注意幾個更改
具有空原型的代碼引用不再受到特殊處理。它們會像其他代碼引用一樣傳遞參數(即使它們選擇忽略它)。
%hash ~~ sub {}
和 @array ~~ sub {}
現在測試該子例程對哈希的每個鍵(或數組的每個元素)返回真值,而不是將整個哈希或數組作為對該子例程的引用傳遞。
由於交換性的破壞,當代碼引用出現在 ~~
運算子的左側時,不再像任何普通標量一樣特殊對待。
undef ~~ %hash
總是為假(因為 undef
不能是哈希中的鍵)。不執行到 ""
的隱式轉換(這在 perl 5.10.0 中是這種情況)。
$scalar ~~ @array
現在始終將智能匹配分配到數組的元素上。如果 @array 中的一個元素驗證 $scalar ~~ $element
,則為真。這是測試數組是否包含標量的舊行為的泛化。
智能匹配運算子的完整分派表在 perlsyn 中的“智能匹配詳細信息” 中給出。
根據基於最右引數類型的調度規則,當物件重載 ~~
出現在運算子的右側時,重載例程將總是被呼叫(第3個引數設置為true值,參見 overload)。然而,當物件出現在左側時,僅當最右引數是簡單純量時,才會呼叫重載例程。這樣,智慧比對在陣列之間的分配性不會被破壞,以及與複雜類型(程式參考、雜湊、正則表達式)的其他行為。因此,智慧比對的重載例程的撰寫者大多只需關心與純量的比對,以及可能的字串化重載;其他常見情況將自動一致處理。
~~
現在將拒絕在不重載它的物件上工作(為了避免依賴物件的基礎結構)。 (然而,如果物件重載了字串化或數字化運算子,並且如果重載回退是啟用的,則將使用它,如常。)
一些Unicode屬性的定義已更改以符合當前Unicode標準。這些列在上面 "Unicode大修" 下。這個變更可能會破壞期望舊定義的程式碼。
boolkeys運算已移至雜湊運算的群組。這會破壞二進制兼容性。
現在文件處理器始終被祝福為 IO::File
。
以前的行為是將文件處理器祝福為 FileHandle(一個空的代理類),如果它被加載到記憶體中,否則將其祝福為 IO::Handle
。
use feature :5.10*
的語意略有更改。有關詳細信息,請參閱 "模組和Pragma"。
Perl的開發人員現在使用git,而不是Perforce。這應該僅對積極參與核心工作的人有意義的純內部變更。但是,您可能會看到perl的一些細微差異,因此而有所不同 perl -V
的輸出細節。有關更多信息,請參閱 perlrepository。
作為 Test::Harness
2.x 到 3.x 的升級的一部分,實驗性的 Test::Harness::Straps
模組已被刪除。有關更多詳細信息,請參閱 "模組和Pragma"。
作為 ExtUtils::MakeMaker
升級的一部分,此發行版已移除了 ExtUtils::MakeMaker::bytes
和 ExtUtils::MakeMaker::vmsish
模組。
Module::CoreList
不再包含 %:patchlevel
哈希。
length undef
現在返回 undef。
不支援的私有 C API 函數現在被聲明為 "static",以防止泄漏到 Perl 的公共 API。
為了支援引導過程,miniperl 不再使用 UTF-8 支援建構正則表達式引擎。
這使得在 PERL_UNICODE 設置和 UTF-8 區域設置的情況下完成建構成為可能。否則將存在引導問題,因為 miniperl 無法載入正則表達式引擎的 UTF-8 組件,因為它們尚未建構。
miniperl 的 @INC 現在僅限於 -I...
、$ENV{PERL5LIB}
的拆分和 ".
"
"#line XXX"
指令現在需要在後面加上空格或換行。
綁定的文件處理器現在具有額外的 EOF 方法,提供 EOF 類型。
為了更好地匹配所有其他流程控制語句,foreach
不再可用作屬性。
Perl 的命令行開關 "-P" 在版本 5.10.0 中已被棄用,現已被移除。可以使用 CPAN 模組 Filter::cpp
作為替代。
不時地,Perl 的開發人員發現有必要棄用之前作為核心發行版的一部分提供的功能或模組。我們深知對於使用 Perl 構建或維護軟件的開發人員來說,對 Perl 進行向後不兼容的更改可能帶來的痛苦和沮喪。您可以放心,當我們棄用一個功能或語法時,這並不是我們輕率做出的選擇。有時,我們選擇棄用功能或語法是因為發現其設計或實現不佳。有時,這是因為它們阻礙了其他功能的開發或導致性能問題。有時,原因更加複雜。在可能的情況下,我們會盡量保持棄用功能在至少一個主要版本中以其先前的形式提供給開發人員使用。只要棄用的功能不會主動干擾我們維護和擴展 Perl 的能力,我們將盡可能保留它。
現在已棄用以下項目
suidperl
不再是 Perl 的一部分。它曾经提供了一种机制来模拟在不正确支持它的系统上的 setuid 权限位。
:=
表示空属性列表Perl 解析器的意外使得这些构造都是等效的
my $pi := 4;
my $pi : = 4;
my $pi : = 4;
将 :
视为属性列表的开始,该列表在 =
之前结束。由于这里空格不重要,因此所有的解析为一个空属性列表,因此上述所有内容都等效于,并且最好写为
my $pi = 4;
因为空列表不需要进行属性处理。
现在,这意味着 :=
不能用作新的标记,否则会在不知不觉中更改现有代码的含义。因此,该特定形式现在已被弃用,并将成为语法错误。如果绝对需要空属性列表(例如,由于代码生成器的原因),则在 =
前添加一个空格以避免警告。
UNIVERSAL->import()
方法 UNIVERSAL->import()
现已被弃用。尝试向 use UNIVERSAL
语句传递导入参数将导致弃用警告。
现已弃用使用 goto
从外部范围跳转到内部范围。这种罕见的用例在作用域的实现中造成问题。
在 \N{name}
中,name 几乎可以是任何内容。标准 Unicode 名称的领域非常有限,但自定义名称转换器可以创建完全由标点符号组成的名称,例如。现已弃用创建不以字母开头且不是字母数字的名称,也不包含其他字符,除了空格、破折号、括号和冒号之外的少量字符。由于 \N
的附加含义(请参阅 "\N" 实验性正则表达式转义
),看起来像花括号括起来的量词的名称将不起作用。例如,\N{3,4}
现在意味着匹配 3 到 4 个非换行符;在此之前,可以创建一个自定义名称 3,4
。
以下模組將在未來的版本中從核心發行版中移除,應改從 CPAN 安裝。在 CPAN 上需要這些模組的發行版應將它們添加到其先決條件中。這些模組的核心版本將發出棄用警告。
如果您發行 Perl 的封裝版本,無論是獨立地還是作為較大系統的一部分,您都應仔細考慮核心模組棄用的影響。您可能希望考慮將 Perl 的默認版本與一些或全部棄用模組的封裝版一起提供,這些封裝版將安裝到 vendor
或 site
perl 庫目錄中。這將抑制棄用警告。
或者,您可能希望考慮修補 lib/deprecate.pm,以提供與您的封裝系統或 Perl 發行版相關的棄用警告,與您的封裝系統或發行版如何管理從提供給定功能的單個封裝版本的發行版到後來需要知道安裝多個封裝版本以獲得相同功能的發行版的過渡一致。
您可以通過從 CPAN 安裝相關模組來使這些棄用警告消失。要安裝它們的最新版本,只需安裝 Task::Deprecations::5_12
。
Switch 有錯誤,應該避免使用。您可能會發現 Perl 的新的 given
/when
功能是一個合適的替代。更多信息請參見 perlsyn 中的 "Switch statements"。
Perl_pmflag
不再是 Perl 的公共 API 的一部分。現在調用它會生成一個棄用警告,並且將在未來的版本中移除。儘管被列為 API 的一部分,但它從未被文檔化,並且只在 toke.c 和 5.10 之前的 regcomp.c 中使用。在核心中,它已被靜態函數取代。
termcap.pl, tainted.pl, stat.pl, shellwords.pl, pwd.pl, open3.pl, open2.pl, newgetopt.pl, look.pl, find.pl, finddepth.pl, importenv.pl, hostname.pl, getopts.pl, getopt.pl, getcwd.pl, flush.pl, fastcwd.pl, exceptions.pl, ctime.pl, complete.pl, cacheout.pl, bigrat.pl, bigint.pl, bigfloat.pl, assert.pl, abbrev.pl, dotsh.pl,和 timelocal.pl 現在都已被棄用。早期,Perl 的開發人員打算在 5.14.0 版本中從 Perl 的核心中刪除這些庫。
在釋出 5.12.0 版本前的最終測試期間,幾位開發人員發現目前的生產代碼使用了這些古老的庫,其中一些還在 Perl 核心內部。因此,Pumpking 允許它們繼續存在。它們將在 5.14.0 版本中開始警告其已廢棄的狀態,並將在 5.16.0 版本中移除。
Perl 的開發人員努力更新 Perl,使其與最新的 Unicode 標準同步。這些變化包括:
Perl 現在可以處理每個 Unicode 字符的屬性。新的文檔 perluniprops 列出了所有可用的非統一漢字字符屬性。默認情況下,perl 不會公開統一漢字、已廢棄或 Unicode 內部屬性。詳細信息請參閱下面的部分,在 pod 中也有一節列出了這些內容,並解釋了為什麼它們不會被公開。
Perl 現在完全支持使用 =
和 :
寫正則表達式的 Unicode 複合風格:\p{property=value}
和 \p{property:value}
(兩者意思相同)。
Perl 現在完全支持 \p{...}
構造中大括號內文本的 Unicode 寬鬆匹配規則。此外,Perl 允許數字之間使用下劃線。
Perl 現在接受所有 Unicode 定義的屬性和屬性值的同義詞。
qr/\X/
,它與 Unicode 邏輯字符匹配,已擴展以更好地支持各種亞洲語言。它現在被定義為擴展字詞群集。 (請參閱 http://www.unicode.org/reports/tr29/)。任何先前匹配並且有意義的內容將繼續被接受。此外
\X
將不會將 CR LF
序列分開。
\X
現在將匹配包含 ZWJ
和 ZWNJ
字符的序列。
\X
現在將始終匹配至少一個字符,包括初始標記。標記通常位於基本字符之後,但在 Unicode 中可能單獨存在,在一行的開頭或在 ZWSP
之後,\X
現在將處理該情況,這是 \X
不再匹配不合理的事物的部分。例如,以前,您可以有帶有重音的 LF 的荒謬情況。
\X
現在將匹配(韓文) Hangul 音節序列,以及泰文和老撾文的特殊情況。
否則,對於不受影響的語言,此更改應該是透明的。
\p{...}
使用 Canonical_Combining_Class 屬性進行匹配在以前的 Perl 發行版中完全失效。現在它們應該正常工作。
在 Perl 5.12 之前,Unicode 的 Decomposition_Type=Compat
屬性和一個 Perl 擴展具有相同的名稱,這導致兩者都無法匹配所有正確的值(其中一個有超過 100 個錯誤,另一個有幾千個錯誤)。Perl 擴展現在已經更名為 Decomposition_Type=Noncanonical
(簡稱:dt=noncanon
)。它的含義與之前預期的相同,即所有非規範分解類型的聯集,其中 Unicode Compat
只是其中之一。
\p{Decomposition_Type=Canonical}
現在包括韓文音節。
\p{Uppercase}
和 \p{Lowercase}
現在按照 Unicode 標準的要求工作。這意味著它們各自匹配的字符比以前多一些。
\p{Cntrl}
現在與 \p{Control}
匹配相同的字符。這意味著它不再匹配私有使用(gc=co)、代理(gc=cs)或格式(gc=cf)的字符。格式字符表示可能存在的最大問題。除了 36 個字符外,它們中的所有字符都已經正式棄用或強烈建議不再使用。在這 36 個字符中,可能最廣泛使用的是軟連字號(U+00AD)、BOM、ZWSP、ZWNJ、WJ 和類似字符,以及雙向控制字符。
\p{Alpha}
現在與 \p{Alphabetic}
匹配相同的字符。在 5.12 之前,Perl 的定義包括一些實際上不是字母的事物(所有標記),而省略了許多實際上是字母的事物。 \p{Alnum}
和 \p{Word}
的定義取決於 Alpha 的定義,並相應地發生了變化。
\p{Word}
不再錯誤地匹配非字元字符,如分數。
\p{Print}
不再匹配行控制字符:Tab、LF、CR、FF、VT 和 NEL。這使其符合標準和文檔。
\p{XDigit}
現在與 \p{Hex_Digit}
匹配相同的字符。這意味著除了它目前匹配的字符外,[A-Fa-f0-9]
,它還將匹配 22 個全角等效字符,例如 U+FF10: FULLWIDTH DIGIT ZERO。
數字類型屬性已擴展以包括 Unihan 字元。
有一個新的 Perl 擴展,名為 'Present_In' 或簡稱 'In' 屬性。這是 Unicode 年齡屬性的擴展,但 \p{In=5.0}
匹配任何其使用已經確定的 Unicode 版本 5.0 的代碼點。 \p{Age=5.0}
僅匹配在 Unicode 版本 5.0 中添加的代碼點。
現在,許多屬性的未分配代碼點都具有正確的值。受影響的屬性包括 Bidi_Class、East_Asian_Width、Joining_Type、Decomposition_Type、Hangul_Syllable_Type、Numeric_Type 和 Line_Break。
Default_Ignorable_Code_Point(預設可忽略程式碼點)、ID_Continue(ID_繼續)和ID_Start(ID 開始)屬性現在已根據當前 Unicode 定義進行了更新。
早期版本的 Perl 誤植了某些應僅供 Unicode 內部使用的屬性。如果啟用,將會在正則表達式中使用這些屬性時生成一條過時警告消息。這些屬性包括:Other_Alphabetic(其他字母)、Other_Default_Ignorable_Code_Point(其他預設可忽略程式碼點)、Other_Grapheme_Extend(其他字符延伸)、Other_ID_Continue(其他 ID 繼續)、Other_ID_Start(其他 ID 開始)、Other_Lowercase(其他小寫)、Other_Math(其他數學)和 Other_Uppercase(其他大寫)。
現在可以根據每個安裝進行更改 Perl 所理解的 Unicode 屬性。如上所述,某些屬性默認已關閉。這些包括所有 Unihan 屬性(應通過 CPAN 模塊 Unicode::Unihan 進行訪問)和 Perl 從未公開的任何過時或僅供 Unicode 內部使用的屬性。
在 lib/unicore/To
目錄中生成的文件現在標記更清晰,可以直接供應用程序使用。其中的新哈希條目給出了普通條目的格式,這使得機器解析更加容易。Perl 可以為此目錄中的任何屬性生成文件,盡管大多數已被抑制。您可以在 perluniprops 中找到更改指令。
autodie
autodie
是 Fatal
模組的新的區域範圍替代方案。捆綁版本為 2.06_01。請注意,在此版本中,當 autodie
生效時,使用字符串評估可能導致 autodie 行為泄漏到周圍範圍。請參閱 "autodie 中的 BUGS" 以獲取更多詳細信息。
版本 2.06_01 已添加到 Perl 核心中。
Compress::Raw::Bzip2
版本 2.024 已添加到 Perl 核心中。
overloading
overloading
允許您在某些或所有操作中區域性地禁用或啟用過載。
版本 0.001 已添加到 Perl 核心中。
parent
parent
在編譯時建立與基類的 ISA 關係。它提供了 base
的主要功能,而不會引入進一步不需要的行為。
版本 0.223 已添加到 Perl 核心中。
Parse::CPAN::Meta
版本 1.40 已添加到 Perl 核心中。
VMS::DCLsym
版本 1.03 已添加到 Perl 核心中。
VMS::Stdio
版本 2.4 已添加到 Perl 核心。
XS::APItest::KeywordRPN
版本 0.003 已添加到 Perl 核心。
base
從版本 2.13 升級到 2.15。
bignum
從版本 0.22 升級到 0.23。
charnames
charnames
現在包含 Unicode 的 NameAliases.txt 數據庫文件。這將使一些額外的 \N
字符名得到識別,以前不會被識別;例如,"\N{LATIN CAPITAL LETTER GHA}"
。
從版本 1.06 升級到 1.07。
constant
從版本 1.13 升級到 1.20。
diagnostics
diagnostics
現在在內部支持 %.0f 格式。
diagnostics
不再壓制 Use of uninitialized value in range (or flip)
警告。[perl #71204]
從版本 1.17 升級到 1.19。
feature
在 feature
中,:5.10
和 :5.10.X
功能捆綁的含義略有變化。如果有的話,最後一個組件(即 X
)將被忽略。這是基於一個假設,即新功能一般不會添加到維護版本中。因此,:5.10
和 :5.10.X
具有相同的效果。這是對 5.10.0 文檔中記錄的行為的更改。
feature
現在包括 unicode_strings
功能
use feature "unicode_strings";
此特性打開了對於不具有內部 UTF-8 標誌但包含介於 128 和 255 之間的單字節字符的字符串的 Unicode 語義的支持(uc
、lc
、ucfirst
、lcfirst
)。
從版本 1.11 升級到 1.16。
less
less
現在包括 stash_name
方法,以允許 less
的子類選擇將其 stash 存儲在 %^H 的位置。
從版本 0.02 升級到 0.03。
lib
從版本 0.5565 升級到 0.62。
mro
mro
現在作為 XS 擴展實現。文檔化的接口沒有改變。依賴於某些 mro::
方法在任何時候都可用的代碼將會“保留兩者”。
從版本 1.00 升級到 1.02。
overload
overload
現在允許對 'qr' 進行過載。
從版本 1.06 升級到 1.10。
threads
從版本 1.67 升級到 1.75。
從版本 1.14 升級到 1.32。
version
version
現在支援本文件及其自身文檔中早期描述的"版本號格式"。
從版本 0.74 升級到 0.82。
warnings
warnings
新增了一個 warnings::fatal_enabled()
函數。它還包括了一個新的 illegalproto
警告類別。請參見 "新或更改的診斷" 了解此更改的詳細信息。
從版本 1.06 升級到 1.09。
Archive::Extract
從版本 0.24 升級到 0.38。
Archive::Tar
從版本 1.38 升級到 1.54。
Attribute::Handlers
從版本 0.79 升級到 0.87。
AutoLoader
從版本 5.63 升級到 5.70。
B::Concise
從版本 0.74 升級到 0.78。
B::Debug
從版本 1.05 升級到 1.12。
B::Deparse
從版本 0.83 升級到 0.96。
B::Lint
從版本 1.09 升級到 1.11_01。
CGI
從版本 3.29 升級到 3.48。
Class::ISA
從版本 0.33 升級到 0.36。
注意: Class::ISA
已被棄用,可能會在未來版本中刪除。
Compress::Raw::Zlib
從版本 2.008 升級到 2.024。
CPAN
從版本 1.9205 升級到 1.94_56。
CPANPLUS
從版本 0.84 升級到 0.90。
CPANPLUS::Dist::Build
從版本 0.06_02 升級到 0.46。
Data::Dumper
從版本 2.121_14 升級到 2.125。
DB_File
從版本 1.816_1 升級到 1.820。
Devel::PPPort
從版本 3.13 升級到 3.19。
Digest
從版本 1.15 升級到 1.16。
Digest::MD5
從版本 2.36_01 升級到 2.39。
Digest::SHA
從版本 5.45 升級到 5.47。
Encode
從版本 2.23 升級到 2.39。
Exporter
從版本 5.62 升級到 5.64_01。
ExtUtils::CBuilder
從版本 0.21 升級到 0.27。
ExtUtils::Command
從版本 1.13 升級到 1.16。
ExtUtils::Constant
從版本 0.2 升級到 0.22。
ExtUtils::Install
從版本 1.44 升級到 1.55。
ExtUtils::MakeMaker
從版本 6.42 升級到 6.56。
ExtUtils::Manifest
從版本 1.51_01 升級到 1.57。
ExtUtils::ParseXS
從版本 2.18_02 升級到 2.21。
File::Fetch
從版本 0.14 升級到 0.24。
File::Path
從版本 2.04 升級到 2.08_01。
File::Temp
從版本 0.18 升級到 0.22。
Filter::Simple
從版本 0.82 升級到 0.84。
Filter::Util::Call
從版本 1.07 升級到 1.08。
Getopt::Long
已從版本 2.37 升級至 2.38。
IO
已從版本 1.23_01 升級至 1.25_02。
IO::Zlib
已從版本 1.07 升級至 1.10。
IPC::Cmd
已從版本 0.40_1 升級至 0.54。
IPC::SysV
已從版本 1.05 升級至 2.01。
Locale::Maketext
已從版本 1.12 升級至 1.14。
Locale::Maketext::Simple
已從版本 0.18 升級至 0.21。
Log::Message
已從版本 0.01 升級至 0.02。
Log::Message::Simple
已從版本 0.04 升級至 0.06。
Math::BigInt
已從版本 1.88 升級至 1.89_01。
Math::BigInt::FastCalc
已從版本 0.16 升級至 0.19。
Math::BigRat
已從版本 0.21 升級至 0.24。
Math::Complex
已從版本 1.37 升級至 1.56。
Memoize
已從版本 1.01_02 升級至 1.01_03。
MIME::Base64
已從版本 3.07_01 升級至 3.08。
Module::Build
已從版本 0.2808_01 升級至 0.3603。
Module::CoreList
已從版本 2.12 升級至 2.29。
Module::Load
已從版本 0.12 升級至 0.16。
Module::Load::Conditional
已從版本 0.22 升級至 0.34。
Module::Loaded
已從版本 0.01 升級至 0.06。
Module::Pluggable
已從版本 3.6 升級至 3.9。
Net::Ping
已從版本 2.33 升級至 2.36。
NEXT
已從版本 0.60_01 升級至 0.64。
Object::Accessor
從版本 0.32 升級到 0.36。
Package::Constants
已從版本 0.01 升級至 0.02。
PerlIO
從版本 1.04 升級到 1.06。
Pod::Parser
從版本 1.35 升級到 1.37。
Pod::Perldoc
從版本 3.14_02 升級到 3.15_02。
Pod::Plainer
從版本 0.01 升級到 1.02。
注意: Pod::Plainer
已被棄用,可能會在未來的 Perl 版本中移除。
Pod::Simple
從版本 3.05 升級到 3.13。
Safe
從版本 2.12 升級到 2.22。
SelfLoader
從版本 1.11 升級到 1.17。
Storable
從版本 2.18 升級到 2.22。
Switch
從版本 2.13 升級到 2.16。
注意: Switch
已被棄用,可能會在未來的 Perl 版本中移除。
Sys::Syslog
從版本 0.22 升級到 0.27。
Term::ANSIColor
從版本 1.12 升級到 2.02。
Term::UI
從版本 0.18 升級到 0.20。
Test
從版本 1.25 升級到 1.25_02。
Test::Harness
從版本 2.64 升級到 3.17。
Test::Simple
從版本 0.72 升級到 0.94。
Text::Balanced
從版本 2.0.0 升級到 2.02。
Text::ParseWords
從版本 3.26 升級到 3.27。
Text::Soundex
從版本 3.03 升級到 3.03_01。
Thread::Queue
從版本 2.00 升級到 2.11。
Thread::Semaphore
從版本 2.01 升級到 2.09。
Tie::RefHash
從版本 1.37 升級到 1.38。
Time::HiRes
從版本 1.9711 升級到 1.9719。
Time::Local
從版本 1.18 升級到 1.1901_01。
Time::Piece
從版本 1.12 升級到 1.15。
Unicode::Collate
從版本 0.52 升級到 0.52_01。
Unicode::Normalize
從版本 1.02 升級到 1.03。
Win32
從版本 0.34 升級到 0.39。
Win32API::File
從版本 0.1001_01 升級到 0.1101。
XSLoader
從版本 0.08 升級到 0.10。
attrs
從 Perl 核心中移除。之前的版本為 1.02。
CPAN::API::HOWTO
從 Perl 核心中移除。之前的版本為 'undef'。
CPAN::DeferedCode
從 Perl 核心中移除。之前的版本為 5.50。
CPANPLUS::inc
從 Perl 核心中移除。之前的版本為 'undef'。
DCLsym
從 Perl 核心中移除。之前的版本為 1.03。
ExtUtils::MakeMaker::bytes
從 Perl 核心中移除。之前的版本為 6.42。
ExtUtils::MakeMaker::vmsish
從 Perl 核心中移除。之前的版本為 6.42。
Stdio
從 Perl 核心中移除。之前的版本為 2.3。
Test::Harness::Assert
從 Perl 核心中移除。之前的版本為 0.02。
Test::Harness::Iterator
從 Perl 核心中移除。之前的版本為 0.02。
Test::Harness::Point
從 Perl 核心中移除。之前的版本為 0.01。
Test::Harness::Results
從 Perl 核心中移除。之前的版本為 0.01。
Test::Harness::Straps
從 Perl 核心中移除。之前的版本為 0.26_01。
Test::Harness::Util
從 Perl 核心中移除。之前的版本為 0.01。
XSSymSet
已從 Perl 核心中移除。先前版本為 1.1。
請參閱上方的 "已廢棄的模組"。
perlhaiku 包含在 Haiku 平台上建置 Perl 的說明。
perlmroapi 描述了可插入方法解析順序的新介面。
perlperf,由 Richard Foley 編撰,提供了一份關於性能和優化技術的介紹,特別是針對 Perl 程式。
perlrepository 描述了如何使用 git 版本控制系統訪問 Perl 源代碼。
perlpolicy 將「有關貢獻模組的社交契約」擴展為有關 Perl 移植政策的初步文件。
各種大型的 Changes* 文件(列出了過去 18 年中對 Perl 所做的每一次更改)已被刪除,並以一個小文件取代,也稱為 Changes,它只是解釋了如何從 git 版本控制系統中提取相同的信息。
Porting/patching.pod 已被刪除,因為它主要描述了與舊的基於 Perforce 的存儲庫交互的方法,而該存儲庫現在已經過時。仍然相關的信息已移至 perlrepository。
現在已將 unless (EXPR) BLOCK else BLOCK
的語法文件化為有效,以及 unless (EXPR) BLOCK elsif (EXPR) BLOCK ... else BLOCK
的語法,儘管實際上使用後者可能不是您的源代碼的可讀性的最佳選擇。
文件化了 -X 重載。
文件化了 when()
對大多數文件測試操作符的特殊處理
將 when
文件化為語法修飾符。
已刪除「舊 Perl 线程教程」,該教程描述了 5005 线程。
pod/perlthrtut.pod 是為 ithreads 重新製作的相同材料。
更正了先前的文檔:v-strings 並未被廢棄
使用版本對象時,我們需要使用 MODULE VERSION 語法。此補丁移除了廢棄通知。
安全聯絡信息現在已成為 perlsec 的一部分。
核心文檔的相當部分已更新,以澄清 Perl 的 Unicode 處理行為。
剩餘的核心文件大部分已經過審查和編輯,以確保清晰度、語言的一致性以及修正湯姆·克里斯蒂安森(Tom Christiansen)名字的拼寫錯誤。
Pod規範(perlpodspec)已更新,使其與大多數Pod系統已支援的現代用法保持一致。現在可以在“begin/end”區域的格式名稱後面加上參數字符串。現在允許使用帶有文字描述的URI鏈接。對L<"section">
的使用已標記為不推薦使用。
if.pm已在perlfunc中的"use"中記錄為一種獲取條件模塊載入的手段,儘管在use
周圍有隱式的BEGIN區塊。
在perlvar.pod中針對$1
的文件已經明確化。
現在已記錄了\N{U+code point}
。
新的內部緩存意味著isa()
通常會更快。
C3
方法解析順序的實現已被優化——具有單繼承的類的線性化速度提高了40%。多重繼承的性能保持不變。
在use locale
下,與區域相關的信息現在被緩存在只讀值上,例如由keys %hash
返回的列表。這使得在use locale
作用域內的操作(如sort keys %hash
)速度更快。
空的DESTROY
方法不再被調用。
Perl_sv_utf8_upgrade()
現在更快。
空哈希上的keys
現在更快。
if (%foo)
已被優化為比if (keys %foo)
更快。
當$str
的長度為一或$num
很大時,字符串重複運算符($str x $num
)現在速度提高了幾倍。
將陣列反轉為其自身(如@a = reverse @a
)在void上下文中現在是原地進行的,速度比以前快了幾個量級。它還將盡可能保留不存在的元素,即對於非魔法陣列或具有EXISTS
和DELETE
方法的綁定陣列。
perlapi、perlintern、perlmodlib和perltoc現在都是在構建時生成的,而不是作為發行的一部分發送的。
如果vendorlib
和vendorarch
相同,則它們只添加到@INC
一次。
$Config{usedevel}
和 C 級別的 PERL_USE_DEVEL
現在在 perl 是使用 -Dusedevel
編譯時被定義。
Configure 現在會啟用 -fstack-protector
,以提供對堆棧損毀攻擊的保護,如果編譯器支援的話。
Configure 現在將根據您使用的是 C++ 編譯器還是 C 編譯器,確定可重入函數和 gconvert
的正確原型。
在 Unix 上,如果從包含 git 存儲庫的樹進行構建,則配置過程將注意您已檢出的提交哈希,以在 perl -v
和 perl -V
的輸出中顯示。未推送的本地提交將自動添加到 perl -V
顯示的本地補丁列表中。
Perl 現在支援 SystemTap 的 dtrace
兼容層,並且在過程中修復了與鏈接 miniperl
相關的問題。
perldoc 現在使用 less -R
而不是 less
,以改善面對 groff
新使用 ANSI 轉義碼時的行為。
perl -V
現在報告了編譯時選項 USE_PERL_ATOF
和 USE_ATTRIBUTES_FOR_PERLIO
的使用情況。
作為對 ext 的展平的一部分,所有平台上的所有擴展都是由 make_ext.pl 構建的。這取代了 Unix 特定的 ext/util/make_ext、VMS 特定的 make_ext.com 和 Win32 特定的 win32/buildext.pl。
每個 Perl 的發布版本都會有大量的內部變更,這些變更不應該影響日常使用,但對於使用 Perl 源代碼的開發人員來說仍然是值得注意的。
C 源代碼文件頂部的 J.R.R. 托爾金引用已經檢查並添加了正確的引用,感謝 Tom Christiansen 提供的補丁。
傳統上位於 Perl 源代碼中的 lib/ 和 ext/ 目錄中的雙生模塊的內部結構發生了重大變化。在可能的情況下,雙生模塊已從 lib/ 和 ext/ 中提取出來。
由 Perl 的開發人員作為 Perl 核心的一部分維護的雙生模塊現在位於 dist/ 中。主要在 CPAN 上維護的雙生模塊現在位於 cpan/ 中。當報告位於 cpan/ 下的模塊中的錯誤時,請直接將您的錯誤報告發送給該模塊的 bug 追蹤器或作者,而不是 Perl 的 bug 追蹤器。
\N{...}
現在編譯得更好,始終強制 UTF-8 內部表示
Perl 的開發人員已經修復了關於識別 \N{...}
構造的幾個問題。作為此過程的一部分,perl 將以 UTF-8 格式存儲任何包含 \N{name}
或 \N{U+code point}
的純量或正則表達式。 (對於所有不使用自定義翻譯器的 \N{name}
出現,這在以前就是真實的,但現在它總是真實的。)
Perl_magic_setmglob 現在了解關於全局環境變數的信息,修復了 RT #71254。
SVt_RV
現在不存在。 RVs 現在存儲在 IVs 中。
Perl_vcroak()
現在接受空的第一個參數。此外,對於“not NULL”編譯器註釋進行了全面審查,並修正了幾個其他內部函數的註釋。
新的巨集 dSAVEDERRNO
、dSAVE_ERRNO
、SAVE_ERRNO
、RESTORE_ERRNO
已被添加以正式化暫時保存 errno
變量。
函數 Perl_sv_insert_flags
已添加以增強 Perl_sv_insert
。
函數 Perl_newSV_type(type)
已添加,等效於 Perl_newSV()
後跟 Perl_sv_upgrade(type)
。
函數 Perl_newSVpvn_flags()
已添加,等效於 Perl_newSVpvn()
然後執行與標誌相關的操作。
目前支持兩個標誌位。
SVf_UTF8
將為您調用 SvUTF8_on()
。(請注意,這不會將 ISO 8859-1 字符序列轉換為 UTF-8)。還提供了一個包裝器,newSVpvn_utf8()
。
SVs_TEMP
現在在新的 SV 上調用 Perl_sv_2mortal()
。
還有一個接受常量字符串的包裝器,newSVpvs_flags()
。
已添加函數 Perl_croak_xs_usage
作為對 Perl_croak
的包裝器。
Perl 現在導出函數 PerlIO_find_layer
和 PerlIO_list_alloc
。
PL_na
已從核心代碼中消滅,被本地 STRLEN 臨時變量或 *_nolen()
調用所取代。任何一種方法都比 PL_na
更快,它是在 ithreads 下指向解釋器結構的指針解引用,否則是一個全局變量。
Perl_mg_free()
曾經會使釋放的內存通過標量的 SvMAGIC()
可訪問。它現在更新鏈表,在釋放每個魔法片段時將其刪除。
在 ithreads 下,PL_reg_curpm
中的正則表達式現在是參考計數的。這消除了許多處理它未被參考計數的不正當工作方法。
Perl_mg_magical()
有時會錯誤地打開 SvRMAGICAL()
。這已經修復。
如果字符串值具有尾隨的“垃圾”,則現在不設置 公共 IV 和 NV 標誌。此行為與如果值超出類型範圍則不設置公共 IV 或 NV 標誌的行為一致。
核心代碼和非雙重生命模塊中的 Nullav
、Nullcv
、Nullhv
、Nullop
、Nullsv
的使用已被 NULL
替換,因為對於不熟悉核心代碼的人來說,NULL
更清晰。
添加了巨集 MUTABLE_PTR(p)
,在(非嚴格)gcc 上不會拋棄 const
,返回 void *
。巨集 MUTABLE_SV(av)
、MUTABLE_SV(cv)
等建立在此之上,將其轉換為 AV *
等,而不拋棄 const
。這允許核心中對 const
正確性進行適當的編譯時審查,並有助於檢測到一些錯誤(現在已修復)。
添加了巨集 mPUSHs()
和 mXPUSHs()
,用於將 SV 推送到棧上並使其死亡。
私有結構 mro_meta
的使用略有變化。核心之外的任何地方都不應該直接訪問這個。
新增了一個工具,Porting/expand-macro.pl,它允許您查看 C 預處理器宏在編譯時的展開情況。當試圖解碼 Perl 核心中的宏混亂時,這很方便。
核心發行版現在可以在類 Unix 平台上並行運行其回歸測試。不再運行 make test
,請在您的環境中設置 TEST_JOBS
為要並行運行的測試數量,然後運行 make test_harness
。在 Bourne-like shell 中,可以這樣做
TEST_JOBS=3 make test_harness # Run 3 tests in parallel
使用環境變量而不是並行 make 本身,因為 TAP::Harness 需要能夠自己安排單個不衝突的測試腳本,而且沒有標準接口可以與它們的作業調度器進行交互。
請注意,目前某些測試腳本可能在並行運行時失敗(特別是 ext/IO/t/io_dir.t
)。如有必要,只需再次按順序運行失敗的腳本,並查看失敗是否消失。
現在可以在 t/TEST 中覆蓋 PERL5OPT
和相關參數
如果某些測試失敗可能會永遠掛起,現在已經加入了“監控”功能,將在超時後終止它們,這有助於確保 make test
和 make test_harness
自動完成。
Perl 的開發人員已經向核心添加了許多新測試。除下面列出的項目外,從 CPAN 更新的許多模塊還包含新測試。
對核心測試進行了重大清理,以確保在測試之前不使用語言和解釋器功能。
make test_porting
現在運行了許多重要的提交前檢查,這對於任何正在工作的 Perl 核心的人可能會有所幫助。
t/porting/podcheck.t 自動檢查 MANIFEST 中所有 .pl、.pm 和 .pod 文件中發現的 POD 的格式正確性,除了主要在 Perl 核心之外維護的雙生模塊。
t/porting/manifest.t 現在測試 MANIFEST 中列出的所有檔案是否存在。
t/op/while_readdir.t 測試在 while 迴圈中單純的 readdir 是否設置了 $_。
t/comp/retainedlines.t 檢查調試器是否能夠保留來自 eval
的源代碼行。
t/io/perlio_fail.t 檢查不良層是否失敗。
t/io/perlio_leaks.t 檢查 PerlIO 層是否有洩漏。
t/io/perlio_open.t 檢查某些特殊形式的開啟是否正常運作。
t/io/perlio.t 包括一般 PerlIO 測試。
t/io/pvbm.t 檢查內部類型 PVBM
和 PVGV
之間是否有意外的交互作用。
t/mro/package_aliases.t 檢查在存在別名的情況下 mro 是否正常運作。
t/op/dbm.t 測試 dbmopen
和 dbmclose
。
t/op/index_thr.t 測試 index
和線程的交互作用。
t/op/pat_thr.t 測試怪異模式和線程的交互作用。
t/op/qr_gc.t 測試 qr
是否有洩漏。
t/op/reg_email_thr.t 測試正則表達式遞歸和線程的交互作用。
t/op/regexp_qr_embed_thr.t 測試具有嵌入 qr//
的模式與線程的交互作用。
t/op/regexp_unicode_prop.t 測試正則表達式中的 Unicode 屬性。
t/op/regexp_unicode_prop_thr.t 測試 Unicode 屬性和線程的交互作用。
t/op/reg_nc_tie.t 測試 Tie::Hash::NamedCapture
的綁定方法。
t/op/reg_posixcc.t 檢查 POSIX 字符類是否行為一致。
t/op/re.t 檢查 universal.c 中可導出的 re
函數是否正常運作。
t/op/setpgrpstack.t 檢查 setpgrp
是否正常運作。
t/op/substr_thr.t 測試 substr
和線程的交互作用。
t/op/upgrade.t 檢查升級和分配純量是否正常運作。
t/uni/lex_utf8.t 檢查語法分析器中的 Unicode 是否正常運作。
t/uni/tie.t 檢查 Unicode 和 tie
是否正常運作。
t/comp/final_line_num.t 測試 EOF 時行號是否正確
t/comp/form_scope.t 測試格式作用域。
t/comp/line_debug.t 測試 @{"_<$file"}
是否正常運作。
t/op/filetest_t.t 測試 -t 文件測試是否正常運作。
t/op/qr.t 測試 qr
。
t/op/utf8cache.t 測試 utf8 緩存的失效。
t/re/uniprops.t 測試 Unicode \p{}
正則表達式構造。
t/op/filehandle.t 測試一些適用於文件測試運算符,以確保它們按預期工作,特別是考慮到文件句柄被賦予的一些內部變化。
t/op/time_loop.t 測試 unix 時間大於 2**63
,現在可以傳遞給 gmtime
和 localtime
,不會引起內部溢出或過長的循環。
對於 -Dm
啟用的診斷功能現已添加 SV 分配追蹤。如果在編譯 perl 二進位檔時啟用了 PERL_MEM_LOG
機制,則追蹤也可以透過該機制輸出。
作為新的診斷,現已添加智慧比對解析追蹤。使用 -DM
來啟用它。
一個新的除錯旗標 -DB
現在會將子程序定義輸出,而 -Dx
則保留其將語法樹輸出的原始用途。
Perl 5.12 提供了一系列新的診斷訊息,以幫助您編寫更好的程式碼。詳情請參閱 perldiag。
影響關鍵字 '%s' 的不良外掛
gmtime(%.0f) 過大
語法分析程式碼嘗試將非拉丁字元 1 插入拉丁字元 1 輸入
語法分析程式碼內部錯誤 (%s)
localtime(%.0f) 過大
過載解引用未返回參考
過載 qr 未返回 REGEXP
Perl_pmflag() 已棄用,並將從 XS API 中刪除
在定義子程序後忽略 lvalue 屬性
當嘗試在定義後將子程序標記為 lvalue 時,將發出此新警告。
Perl 現在會警告您,如果 ++
或 --
無法更改值,因為它超出了表示範圍。
這使用了一個新的警告類別:"imprecision"。
lc
、uc
、lcfirst
和 ucfirst
在傳遞未定義值時會發出警告。
在 "Useless use of a constant in void context" 中顯示常數
在 '%s' 後的原型
恐慌:sv_chop %s
當 C 程序 Perl_sv_chop()
收到不在純量字串緩衝區內的位置時,將產生此新的致命錯誤。這可能是由於有缺陷的 XS 程序造成的,且此時無法恢復。
如果 charnames
處理程序返回畸形的 UTF-8,則現在會產生致命錯誤 Malformed UTF-8 returned by \N
。
如果在編譯正則表達式模式時遇到未解析的命名字符或序列,則現在會產生致命錯誤\N{NAME} must be resolved by the lexer
。例如,在使用單引號內容時可能會發生這種情況,例如$re = '\N{SPACE}'; /$re/;
。請參閱perldiag以獲取有關如何繞過 lexer 的更多示例。
Invalid hexadecimal number in \N{U+...}
是一個新的致命錯誤,當...
所代表的字符常數不是有效的十六進制數字時觸發。
將\N
的新含義作為[^\n]
用於括號字符類是無效的,就像在字符類中的.
失去其特殊含義一樣,這將導致致命錯誤\N in a character class must be a named character: \N{...}
。
對\N{...}
中的...
合法性的規則已經更加嚴格,因此除非...
以字母開頭並繼續由字母數字組合,破折號、空格、括號或冒號組成,否則將發出警告Deprecated character(s) in \N{...} starting at '%s'
。
如果charnames
處理程序返回的字符序列超出了可使用的字符數量的限制,則將發出警告Using just the first characters returned by \N{}
。消息將指示使用了哪些字符以及哪些字符被丟棄了。
許多現有的診斷消息已得到改進或修正。
新的警告類別illegalproto
允許對函數原型周圍的警告進行更精細的控制。
這兩個警告
已從syntax
頂級警告類別移至新的一級類別illegalproto
。這兩個警告目前是在解析無效/非法原型時發出的唯一警告,因此現在可以使用
no warnings 'illegalproto';
來抑制僅這兩個警告,但不包括其他與語法相關的警告。在原型更改、忽略或未滿足的情況下發出的警告仍然屬於以前的prototype
類別。
子例程"%s"上的深度遞歸
現在可以通過重新編譯perl二進制文件,將C預處理器宏PERL_SUB_DEPTH_WARN
設置為所需值,從而更改此警告的深度閾值,默認值為100。
Illegal character in prototype
警告現在在報告_之後的非法字符時更加精確。
mro 合併錯誤消息現在與 Algorithm::C3 產生的錯誤消息非常相似。
改進了錯誤消息 "在第 %d 列的未識別字符 %s"
將錯誤消息更改為 "未識別字符 %s;在第 %d 列之後標記為 <-- HERE %s<-- HERE"。這應該使得更容易發現和更正可疑的字符。
當在純量上下文中的範圍引起未初始化警告時,Perl 現在明確指向 $.
。
split
現在在無效上下文中調用時發出警告。
使用參數過少調用 printf
類型函數現在將發出警告 "在 %s 中缺少參數"
[perl #71000]
如果在沒有參數的情況下使用 each
、keys
或 values
,Perl 現在正確返回語法錯誤而不是 segfault。
如果在沒有參數的情況下調用 tell()
,且之前未讀取過文件,則現在會正確失敗。
如果在沒有參數的情況下調用 tell()
,且之前未讀取過文件,則現在會返回 -1
,並將 errno 設置為 EBADF
,從而恢復 5.8.x 的行為。
overload
不再在重複的 'use overload' 行上隱式取消回退。
POSIX::strftime() 現在可以處理格式字符串中的 Unicode 字符。
從 5 個應僅在 deprecated
中的警告中刪除了 syntax
類別。
三個致命的 pack
/unpack
錯誤消息已被標準化為 panic: %s
Unicode 字符非法
的措辭已經重新表述以更準確。
現在讀作 Unicode 非字符在交換中非法
,並且 perldiag 文件已稍作擴展。
當在正則表達式模式中使用 charnames
處理程序返回的多個字符中除第一個以外的所有字符時,將發出警告 在字符類別中使用 \N{} 返回的僅為第一個字符
。
如果 Perl 遇到 \N{
卻找不到匹配的 }
,將發出警告 在 \N{} 或未轉義的左大括號後缺少右大括號。假定後者
。在這種情況下,Perl 不知道是否意外省略了右大括號,還是是否希望 "匹配非換行符" 接着 "匹配 {
"。它假設後者,因為實際上這是一個有效的解釋,與其他情況不同。如果你的意思是前者,你需要添加匹配的右大括號。如果你的意思是後者,你可以通過寫成 \N\{
來消除此警告。
如果 gmtime
和 localtime
被調用的數字比它們可以可靠處理的要小,將會發出警告 gmtime(%.0f) 太小
和 localtime(%.0f) 太小
。
以下診斷訊息已移除
失控的格式
找不到父元素 %s 的套件 %s
一般而言,此警告僅與其他警告一起產生,移除它允許新增 ISA 查找優化。
使用/需要的 v-字串非可攜式
h2ph 現在也查找 include-fixed
,這是最近新增到 gcc 搜尋路徑中的功能。
h2xs 不再錯誤地將 enum 值視為巨集。它現在也正確處理列舉中的 C++ 樣式註釋(//
)。
perl5db.pl 現在支援 LVALUE
子程序。此外,調試器現在正確處理代理常量子程序和子程序存根。
perlbug 現在使用 %Module::CoreList::bug_tracker
來列印上游 bug 追蹤器 URL。如果使用者將特定模組識別為其 bug 報告的主題並且我們能夠猜測到其上游 bug 追蹤器的 URL,perlbug 現在會向使用者提供一則訊息,解釋核心直接複製 CPAN 版本,並提供直接向上游作者報告 bug 的 URL。
perlbug 當它實際未發送訊息時不再報告 "Message sent"
perlthanks 是一個新的實用程式,用於向 Perl 的作者和維護者發送非 bug 報告。僅收到 bug 報告可能會讓人有些沮喪。如果 Perl 5.12 對您有所幫助,請嘗試使用 perlthanks。這會讓開發人員微笑。
Perl 的開發人員已修復 a2p 中與清單上下文中的 match()
運算子相關的錯誤。此外,a2p 現在不再產生使用 $[
變數的程式碼。
U+0FFFF 現在是正則表達式中的合法字元。
pp_qr 現在始終返回一個新的正則表達式 SV。解決 RT #69852。
不再返回 optree 中(預編譯)正則表達式的參考,而是使用 reg_temp_copy() 創建其副本的參考,並返回該副本的參考。這解決了有關 Regexp::DESTROY 不及時調用的問題(RT #69852),以及與對正則表達式進行祝福和賦值有關的錯誤,如在票證中添加的相關信件中所述。
事實證明,在ithreads克隆Regexp SV時,我們還需要取消SvPVX()共享,因為mother_re被設置為NULL,而不是母體mother_re的克隆副本。這個變化可能會修復在某些其他情況下正則表達式和線程中的錯誤,但到目前為止,測試和錯誤報告都沒有指出任何問題,因此實際上可能不是一個可能到達的邊緣情況。
當perl使用-Dmad
構建時,修復了幾個編譯錯誤和段錯誤。
修復了在5.11.2中語法分析器API更改所引起的問題,該更改破壞了NYTProf的savesrc選項。
-t
應僅對連接到TTY的文件處理程序返回TRUE
微軟C版本的isatty()
對所有字符模式設備返回TRUE,包括類似"/dev/null"的"nul"設備和打印機如"lpt1"。
修復了由提交fafafbaf引起的回歸,該回歸在參數傳遞期間引發了恐慌[perl #70171]
在不備份文件的情況下進行系統就地編輯時,-i'*'現在的工作方式與文檔所述的方式相同[perl #70802]
保存和恢復魔法標誌不再丟失只讀標誌。
畸形語法grep EXPR LIST
(注意缺少逗號)不再導致突然和完全的失敗。
使用qr{}
字面量編譯的正則表達式在再次匹配時正確設置$'
。
使用命名子程序與sort
現在不應該再導致巴士錯誤[perl #71076]
數個錯誤修復捕捉到最近添加的Lexer API引起的小問題。
對@_
進行智能匹配有時會給出偽陰性。[perl #71078]
$@
現在可以被賦予只讀值(無錯誤或堆棧破壞)。
從活動比較子程序內遞歸調用的sort
如果多次運行不再導致巴士錯誤[perl #71076]
Tie::Hash::NamedCapture::*如果傳遞了壞輸入,將不會中止(RT #71828)
@_和$_現在在線程下不再洩漏(RT #34342和#41138,也是#70602,#70974)
-I
在shebang行上現在添加目錄到@INC前面,就像文檔中所述的那樣,在命令行上指定-I
時也是如此。
在非數字進程標識符上調用時,kill
現在是致命的。以前,未定義的進程標識符將被解釋為要殺死進程0的請求,這將在POSIX系統上終止當前進程組。由於進程標識符始終是整數,因此殺死非數字進程現在是致命的。
5.10.0 不慎禁用了一項優化,導致列表分配的性能下降,例如通常用於從 @_
分配函數參數。該優化已被重新啟用,性能回歸問題已修復。(此修復也包含在 5.10.1 中)
修復了在 while (1) { map 1, 1 }
上的內存洩漏 [RT #53038]。
修復了 PerlIO 中的一些潛在 core dump 問題 [RT #57322,54828]。
調試器現在可以與 lvalue 子程序一起使用。
調試器的 m
命令在定義常量的模塊上失效 [RT #61222]。
crypt
和字符串補集可能會對未污染的參數返回污染值 [RT #59998]。
命令行開關 -i
.suffix 現在在更改模式以匹配原始文件之前,使用受限權限重新創建文件。這消除了潛在的競爭條件 [RT #60904]。
在某些 Unix 系統上,$?
中的值即使子進程核心轉儲,也不會設置頂位($? & 128
)。
在某些情況下,$^R
可能錯誤地變為未定義 [RT #57042]。
在 XS API 中,當將 UTF-8 作為鍵的預計算哈希傳遞給各種哈希函數時,可能會導致查找不正確。
在 perl.h 之前包含 XSUB.h 的 XS 代碼會產生編譯時錯誤 [RT #57176]。
$object->isa('Foo')
如果包 Foo
不存在,將報告為假,即使對象的 @ISA
包含 Foo
。
在 5.10.0 新增的 mro 代碼中的各種錯誤,由於操作 @ISA
而觸發,已被發現並修復。
對引用進行位操作可能會使解釋器崩潰,例如 $x=\$y; $x |= "foo"
[RT #54956]。
包括交替的模式可能會對內部 UTF-8 表示敏感,例如
my $byte = chr(192);
my $utf8 = chr(192); utf8::upgrade($utf8);
$utf8 =~ /$byte|X}/i; # failed in 5.10.0
在 UTF8 編碼的 Perl 源文件中(即啟用了 use utf8
的文件中),當 \xNN
,\0NNN
或 \N{}
後跟具有大於 255 的序值的文字字符時,雙引號文字串可能會損壞 [RT #59908]。
B::Deparse
無法正確反編譯各種構造:readpipe STRING
[RT #62428],CORE::require(STRING)
[RT #62488],sub foo(_)
[RT #62484]。
在沒有參數的情況下使用 setpgrp
可能會損壞 perl 堆棧。
eval
的塊形式現在可以被 Safe
和 ops
專門捕獲。以前錯誤地將其視為字符串 eval
。
在 5.10.0 中,兩個字符 [~
有時會被解析為智能匹配運算符(~~
)[RT #63854]。
在 5.10.0 中,模式中的 *
量詞有時會被視為 {0,32767}
[RT #60034, #60464]。例如,這個匹配將失敗
("ab" x 32768) =~ /^(ab)*$/
shmget
在 64 位操作系統上限制為 32 位段大小 [RT #63924]。
使用 next
或 last
退出 given
塊不再產生類似以下的虛假警告
Exiting given via last at foo.pl line 123
將格式分配給 glob 可能會損壞格式;例如
*bar=*foo{FORMAT}; # foo format now bad
嘗試將類型環境轉換為字符串或數字可能會導致斷言失敗。現在將生成正確的錯誤消息,Can't coerce GLOB to $type
。
在use filetest 'access'
下,-x
使用了錯誤的存取模式。已經修正 [RT#49003]。
對返回Unicode值的tied scalar上的length
在第一次不會正確。已經修正。
在array tie
內部使用array tie
可能會導致SEGV。已經修正。[RT#51636]
已經識別並修正了PerlIOStdio_close()
內部的競爭條件。這曾經導致各種線程問題,包括SEGV。
在unpack
中,純量上的()
群組的使用內部會在解釋器堆疊上放置一個列表,這在各種方面表現出來,包括SEGV。現在已修正 [RT#50256]。
substr
,\&$x
,tie $x, $m
和chop
中的Magic被調用兩次。這些都已經修正。
在s///ge
的隱式循環中清除臨時堆疊的5.10.0優化已經回滾,因為它被證明是解釋器看似無關的部分中難以理解的錯誤的原因 [commit ef0d4e17921ee3de]。
elsif
內部警告的行號現在是正確的。
..
運算符現在可以正確處理結束值在最小和最大整數值的範圍內或接近的範圍。
binmode STDIN, ':raw'
在某些平台上可能導致分段錯誤。已經修正 [RT#54828]。
一個off-by-one錯誤意味著index $str, ...
實際上被執行為index "$str\0", ...
。已經修正 [RT#53746]。
修正了與正則表達式中命名捕獲相關的各種洩漏 [RT#57024]。
對哈希的弱引用將洩漏。這影響了DBI
[RT#56908]。
在正則表達式中使用(?|)可能導致segfault [RT#59734]。
在閉包內部使用UTF-8 tr//
可能導致segfault [RT#61520]。
調用Perl_sv_chop()
或以其他方式升級SV可能會在SPARC架構上導致未對齊的64位訪問 [RT#60574]。
在5.10.0版本中,inc_version_list
將在5.8.*
之後錯誤列出5.10.*
;這影響了@INC
的搜索順序 [RT#67628]。
在 5.10.0 版本中,pack "a*", $tainted_value
返回了一个非受污染的值 [RT #52552]。
在 5.10.0 版本中,printf
和 sprintf
在打印 UTF-8 字符串时可能会产生致命错误 panic: utf8_mg_pos_cache_update
[RT #62666]。
在 5.10.0 版本中,动态创建的 AUTOLOAD
方法可能会被忽略(方法缓存问题)[RT #60220,60232]。
在 5.10.0 版本中,use feature
和 //ee
的组合可能会导致内存泄漏 [RT #63110]。
-C
在 shebang(#!
)行上再次被允许,如果它也在命令行上指定。如果 shebang 行上没有在命令行上也没有指定 -C
,以前它是一个静默的无操作,因此 perl 5.10.0 禁止了它,这破坏了一些脚本。现在 perl 检查它是否也在命令行上,并且只在没有时才报错 [RT #67880]。
在 5.10.0 版本中,某些类型的可重入正则表达式可能会崩溃,或导致以下断言失败 [RT #60508]。
Assertion rx->sublen >= (s - rx->subbeg) + i failed
Perl 现在包括以前缺失的 Unicode 字符数据库文件。
Perl 现在在打开匿名临时文件时遵循 TMPDIR
。
Perl 具有极高的可移植性。一般来说,如果一个平台有一个 C 编译器,那么就有人将 Perl 移植到该平台上(或即将移植)。我们很高兴地宣布,Perl 5.12 支持几个新平台。与此同时,是时候告别一些(非常)老的朋友了。
对于 AIX 5L 和 6.1,移除了 libbsd。只有从 libbsd 中使用了 flock()
。
如果安装了 libgdbm < 1.8.3-5,将移除 AIX 5L 和 6.1 上的 libgdbm。在 AIX Toolbox 中,libgdbm 作为一个可选包提供。不幸的是,版本低于 1.8.3-5 的版本是有问题的。
提示的更改意味着 AIX 4.2 應該能夠正常運作。
Perl 現在在 Cygwin 1.7 及更新版本上支援 IPv6。
在 Cygwin 上,我們現在會從 DLL 中刪除最後一個數字。這已經是 cygwin.com 构建的行為多年來了。提示文件已經更新。
跳過在 Darwin 10(Mac OS X 10.6)上測試 be_BY.CP1131 地區設置,因為它仍然存在問題。
修正在 Darwin 8 和 9(分別是 Mac OS X 10.4 和 10.5)上用於識別有問題地區設置的正則表達式中的錯誤。
修正了線程庫的選擇 [perl #69686]。
提示文件現在在 FreeBSD 7 及更新版本上識別正確的線程庫。
我們現在解決了 Irix 6.5 編譯器中一個奇怪的預處理器錯誤: cc -E -
不幸地進入了 K&R 模式,但是 cc -E file.c
卻不會。
提示現在支援 5.* 版本。
-UDEBUGGING
現在在 VMS 上是默認值。
就像很久很久以前在其他地方一樣。還使得在 configure.com 中命令行選擇 -UDEBUGGING 和 -DDEBUGGING 成功;在這之前,唯一的關閉方式是在互動問題中選擇否。
在 VMS 上,64 位系統的默認管道緩衝區大小已經更新為 8192。
如果 $/
設置為數字引用(表示記錄式讀取),則 PerlIO::scalar
的內存臨時文件的讀取將失敗。現在已經修復了這個問題。
VMS 現在支援 getgrgid
。
對 VMS 文件名處理和轉換代碼進行了許多改進和清理。
現在啟用 PERL_VMS_POSIX_EXIT
邏輯名稱會在 VMS 條件值中編碼 POSIX 退出狀態,以更好地與 GNV 的 bash shell 和其他依賴 POSIX 退出值的實用程序進行交互。有關詳細信息,請參見 perlvms 中的 "$?"。
File::Copy
現在在 VMS 上檢測到 Unix 兼容模式。
各種從Stratus衍生的變更已經合併。
現在支援Symbian S60 3.2 SDK和S60 5.0 SDK。
Perl 5.12支援Windows 2000及更高版本。對於舊版Windows的支援代碼仍然包含在內,但將在下一個開發周期中移除。
現在提供使用MinGW-w64構建Perl的初始支援。
perl.exe現在包含一個清單資源,用於指定Windows Vista及更高版本的trustInfo
設置。沒有這個設置,Windows將會將perl.exe視為舊版應用程式,並應用各種啟發式,例如將對受保護的文件系統區域(如“Program Files”文件夾)的訪問重定向到用戶的“VirtualStore”,而不是生成適當的“權限被拒絕”錯誤。
清單資源還會要求Microsoft Common-Controls版本6.0(Windows XP引入的主題控制)。請查看CPAN上的Win32::VisualStyles模組,以切換回舊式未主題化控制,以供舊版應用程式使用。
-t
檔案測試運算符現在只有在文件處理程序連接到控制台窗口時才返回true。在以前的Perl版本中,它將對所有字符模式設備返回true,包括NUL和LPT1。
-p
檔案測試運算符現在正常工作,並且在使用Microsoft Visual C編譯Perl時定義了Fcntl::S_IFIFO常數。在以前的Perl版本中,-p
始終返回false值,並且未定義Fcntl::S_IFIFO常數。
此錯誤特定於Microsoft Visual C,從未影響使用MinGW構建的Perl二進制文件。
現在更廣泛地支援套接字錯誤代碼:POSIX模塊將定義符號名稱,例如POSIX::EWOULDBLOCK,並且$!中的套接字錯誤代碼的字串化也正常工作;
C:\>perl -MPOSIX -E "$!=POSIX::EWOULDBLOCK; say $!"
A non-blocking socket operation could not be completed immediately.
flock()現在會在$!中設置明智的錯誤代碼。以前的Perl版本將$^E的值複製到$!中,這導致了很多混亂。
select()現在更正確地支援所有空的fd_set
。
'.\foo'
和'..\foo'
在do
和require
中與'./foo'
和'../foo'
被處理方式不同[RT #63492]。
改進的消息窗口處理意味著在競爭條件下alarm
和kill
消息將不再丟失。
Perl 的建構基礎設施在發布時不再轉換為 win32 行結尾。如果這對您造成困擾,請使用隨 perl 附帶的 perlbug 程式報告問題。
這是一些重要但未修復的 bug 清單,這些 bug 是從 5.10.x 或 5.8.x 版本中產生的回歸。
如果在您的建構目錄之外存在功能正常的檔案 ../../cpanp-run-perl,則某些 CPANPLUS 測試可能失敗。失敗不應意味著實際功能軟體存在問題。此 bug 已在 [RT #74188] 中修復,並計劃包含在 perl-v5.12.1 中。
List::Util::first
在存在語彙 $_
(通常是由 my $_
或隱式地由 given
引入)時表現不正常。每次迭代設置的變數是 package 變數 $_
,而不是語彙 $_
[RT #67694]。
其他提供以區塊為第一參數的函式的模組可能會出現類似的問題
foo { ... $_ ...} list
當在子執行緒中執行正則表達式時,可能會比編譯模式的執行緒運行速度慢得多 [RT #55600]。
像 "\N{LATIN SMALL LIGATURE FF}" =~ /\N{LATIN SMALL LETTER F}+/
這樣的內容將似乎掛起,因為它們進入一個非常長的運行迴圈 [RT #72998]。
幾個移植者報告說,在某些 Windows 2000 系統上建置後完整執行 Perl 的測試套件時會發生神秘崩潰。據報告,手動執行時,個別測試工作正常。
這實際上是 5.10.0 中引入的變更,但它未包含在該版本的 perldelta 中,因此在這裡提及。
關於處理 /m
修飾符和 qr
的 bug 修復導致 5.8.x 和 5.10.0 之間的行為變更
# matches in 5.8.x, doesn't match in 5.10.0
$re = qr/^bar/; "foo\nbar" =~ /$re/m;
Perl 5.12.0 自 Perl 5.10.0 以來約兩年的開發,包含超過 750,000 行的變更,跨越 3,000 多個文件,由 200 多位作者和提交者貢獻。
Perl 在第三個十年中繼續蓬勃發展,這要歸功於活躍的使用者和開發者社區。以下人員已知貢獻了成為 Perl 5.12.0 的改進
Aaron Crane, Abe Timmerman, Abhijit Menon-Sen, Abigail, Adam Russell, Adriano Ferreira, Ævar Arnfjörð Bjarmason, Alan Grover, Alexandr Ciornii, Alex Davies, Alex Vandiver, Andreas Koenig, Andrew Rodland, andrew@sundale.net, Andy Armstrong, Andy Dougherty, Jose AUGUSTE-ETIENNE, Benjamin Smith, Ben Morrow, bharanee rathna, Bo Borgerson, Bo Lindbergh, Brad Gilbert, Bram, Brendan O'Dea, brian d foy, Charles Bailey, Chip Salzenberg, Chris 'BinGOs' Williams, Christoph Lamprecht, Chris Williams, chromatic, Claes Jakobsson, Craig A. Berry, Dan Dascalescu, Daniel Frederick Crisman, Daniel M. Quinlan, Dan Jacobson, Dan Kogai, Dave Mitchell, Dave Rolsky, David Cantrell, David Dick, David Golden, David Mitchell, David M. Syzdek, David Nicol, David Wheeler, Dennis Kaarsemaker, Dintelmann, Peter, Dominic Dunlop, Dr.Ruud, Duke Leto, Enrico Sorcinelli, Eric Brine, Father Chrysostomos, Florian Ragwitz, Frank Wiegand, Gabor Szabo, Gene Sullivan, Geoffrey T. Dairiki, George Greer, Gerard Goossen, Gisle Aas, Goro Fuji, Graham Barr, Green, Paul, Hans Dieter Pearcey, Harmen, H. Merijn Brand, Hugo van der Sanden, Ian Goodacre, Igor Sutton, Ingo Weinhold, James Bence, James Mastros, Jan Dubois, Jari Aalto, Jarkko Hietaniemi, Jay Hannah, Jerry Hedden, Jesse Vincent, Jim Cromie, Jody Belka, John E. Malmberg, John Malmberg, John Peacock, John Peacock via RT, John P. Linderman, John Wright, Josh ben Jore, Jos I. Boumans, Karl Williamson, Kenichi Ishigaki, Ken Williams, Kevin Brintnall, Kevin Ryde, Kurt Starsinic, Leon Brocard, Lubomir Rintel, Luke Ross, Marcel Grünauer, Marcus Holland-Moritz, Mark Jason Dominus, Marko Asplund, Martin Hasch, Mashrab Kuvatov, Matt Kraai, Matt S Trout, Max Maischein, Michael Breen, Michael Cartmell, Michael G Schwern, Michael Witten, Mike Giroux, Milosz Tanski, Moritz Lenz, Nicholas Clark, Nick Cleaton, Niko Tyni, Offer Kaye, Osvaldo Villalon, Paul Fenwick, Paul Gaborit, Paul Green, Paul Johnson, Paul Marquess, Philip Hazel, Philippe Bruhat, Rafael Garcia-Suarez, Rainer Tammer, Rajesh Mandalemula, Reini Urban, Renée Bäcker, Ricardo Signes, Ricardo SIGNES, Richard Foley, Rich Rauenzahn, Rick Delaney, Risto Kankkunen, Robert May, Roberto C. Sanchez, Robin Barker, SADAHIRO Tomoyuki, Salvador Ortiz Garcia, Sam Vilain, Scott Lanning, Sébastien Aperghis-Tramoni, Sérgio Durigan Júnior, Shlomi Fish, Simon 'corecode' Schubert, Sisyphus, Slaven Rezic, Smylers, Steffen Müller, Steffen Ullrich, Stepan Kasal, Steve Hay, Steven Schubiger, Steve Peters, Tels, The Doctor, Tim Bunce, Tim Jenness, Todd Rinaldo, Tom Christiansen, Tom Hukins, Tom Wyant, Tony Cook, Torsten Schoenfeld, Tye McQueen, Vadim Konovalov, Vincent Pit, Hio YAMASHINA, Yasuhiro Matsumoto, Yitzchak Scott-Thoennes, Yuval Kogman, Yves Orton, Zefram, Zsban Ambrus
這是非常不完整的,因為它是從版本控制歷史自動生成的。特別是,它不包括那些在以前版本的 Perl 中報告問題並幫助改進 Perl 5.12.0 的(非常感謝的)貢獻者的名字。要查看 Perl 所有歷史貢獻者的更完整清單,請參閱 Perl 5.12.0 發行中的 AUTHORS
檔案。
我們的「退休」核心開發者 Nicholas Clark 和 Rafael Garcia-Suarez 應特別致謝他們的卓越和實質性持續貢獻。Nicholas 自 5.10.0 以來個人編寫了超過 30% 的補丁。Rafael 在補丁作者中排名第二,佔 11%,但在提交他人編寫的補丁後排名第一,佔提交的 44%,並且通常在提供大量指導後提交補丁作者的補丁。這些統計數據絕不涵蓋他們所有的貢獻,但以簡短方式表達了沒有他們我們無法完成這一切。
這個版本中包含的許多變更源於 Perl 核心中包含的 CPAN 模組。我們感謝整個 CPAN 社區幫助 Perl 蓬勃發展。
如果您發現了您認為是一個錯誤,您可以檢查最近在 comp.lang.perl.misc 新聞群組和 Perl bug 資料庫發表的文章,網址為 http://rt.perl.org/perlbug/。在 http://www.perl.org/ 也許有相關資訊,這是 Perl 的首頁。
如果您認為您發現了一個未報告的錯誤,請執行隨附您版本的 perlbug 程式。請確保將您的錯誤減少到一個足夠小但具有代表性的測試案例。您的錯誤報告連同 perl -V
的輸出將被發送到 perlbug@perl.org,以便由 Perl 移植團隊進行分析。
如果您要報告的錯誤具有安全性影響,使其不適合發送到公開存檔的郵件列表,請將其發送至 perl5-security-report@perl.org。這將指向一個封閉的訂閱未存檔的郵件列表,其中包括所有核心貢獻者,他們將能夠幫助評估問題的影響,找出解決方案,並協調發布修補程式,以減輕或解決所有 Perl 支援的平台上的問題。請只將此地址用於 Perl 核心的安全問題,不要用於獨立在 CPAN 上分發的模組。
用於查看變更的詳細資訊的 Changes 檔案的解釋。
用於建置 Perl 的 INSTALL 檔案。
一般資訊的 README 檔案。
版權資訊的 Artistic 和 Copying 檔案。
http://dev.perl.org/perl5/errata.html 提供了此版本後發現的問題列表,以及已知不相容此版本的 CPAN 模組列表。