目录

名稱

perl5200delta - perl v5.20.0 的新功能

描述

本文描述了 5.18.0 版本與 5.20.0 版本之間的差異。

如果您從較早版本升級,如 5.16.0,請首先閱讀 perl5180delta,其中描述了 5.16.0 與 5.18.0 之間的差異。

核心增強功能

實驗性子程序簽名

將參數列表展開為詞法變量的聲明性語法。 sub foo ($a,$b) {...} 檢查參數數量並將參數放入詞法變量中。簽名與現有的 sub foo { my($a,$b) = @_; ... } 惯用法不等同。只有在啟用非默認功能時才可使用簽名,並會產生關於實驗性的警告。啟用簽名時,原型的語法衝突通過禁用簽名時的短原型語法來管理。

詳情請參見 perlsub 中的"Signatures"

sub現在帶有prototype屬性

在聲明或定義 sub 時,現在可以在名稱後的括號中指定原型,而不是在括號內指定。

例如,sub foo($$){} 可以重寫為 sub foo : prototype($$){}

更一致的原型解析

多個分號在子程序原型中一直被容忍並被視為單個分號。唯一的例外是這種情況。以 "*" 或 ";*" 開頭的子程序可能會影

空格長期以來一直允許在子程式原型中存在,因此 sub( $ $ ) 等同於 sub($$),但是直到現在,在解析子程式時,空格會被去除。因此,以前由 Scalar::Util::set_prototype 設置的原型中不允許空格。現在允許,並且解析器不再去除空格。這意味著 prototype &mysub 返回原始原型,包括空格。

rand 現在使用一致的隨機數生成器

以前,perl 將使用特定於平台的隨機數生成器,從 libc 的 rand()、random() 到 drand48() 不等。

這意味著 perl 的隨機數質量會因平台而異,從 Windows 上的 15 位 rand() 到像 Linux 上的 drand48() 這樣的 POSIX 平台上的 48 位。

Perl 現在在所有平台上使用自己內部的 drand48() 實現。這並不意味著 perl 的 rand 具有加密安全性。[perl #115928]

新的切片語法

新的 %hash{...}%array[...] 語法返回一個鍵/值(或索引/值)對列表。請參見perldata 中的“鍵/值哈希切片”

實驗性後置解參照

當啟用 postderef 功能時,將設置以下語法等價性

$sref->$*;  # same as ${ $sref }  # interpolates
$aref->@*;  # same as @{ $aref }  # interpolates
$href->%*;  # same as %{ $href }
$cref->&*;  # same as &{ $cref }
$gref->**;  # same as *{ $gref }

$aref->$#*; # same as $#{ $aref }

$gref->*{ $slot }; # same as *{ $gref }{ $slot }

$aref->@[ ... ];  # same as @$aref[ ... ]  # interpolates
$href->@{ ... };  # same as @$href{ ... }  # interpolates
$aref->%[ ... ];  # same as %$aref[ ... ]
$href->%{ ... };  # same as %$href{ ... }

標記為內插的僅在關聯的 postderef_qq 功能也啟用時進行內插。該功能是 實驗性的,在使用時將觸發 experimental::postderef 類別的警告,除非它們被抑制。

有關更多信息,請參閱perlref 中的後置解參照語法部分

現在支持 Unicode 6.3

Perl 現在支持並隨附 Unicode 6.3(儘管 Perl 也可以重新編譯為任何先前的 Unicode 版本)。Unicode 6.3 變更的詳細列表在http://www.unicode.org/versions/Unicode6.3.0/

新的 \p{Unicode} 正則表達式模式屬性

這是 \p{Any} 的同義詞,匹配範圍為 Unicode 定義的 0 - 0x10FFFF 的一組代碼點。

更好的 64 位支援

在 64 位平台上,內部數組函數現在使用 64 位偏移,允許 Perl 數組容納超過 2**31 個元素,如果您有可用的內存。

正則表達式引擎現在支持長度超過 2**31 字符的字符串。[perl #112790, #116907]

函數 PerlIO_get_bufsiz、PerlIO_get_cnt、PerlIO_set_cnt 和 PerlIO_set_ptrcnt 現在返回值和參數為 SSize_t,而不是 int。

use locale 現在適用於 UTF-8 地區設置

在此版本之前,僅支持單字節地區設置,如 ISO 8859 系列。現在,越來越普遍的多字節 UTF-8 地區設置也得到支持。 UTF-8 地區設置是指字符集為 Unicode,編碼為 UTF-8 的地區設置。在此類地區設置下,POSIX LC_CTYPE 類別操作(大小寫轉換(如 lc()"\U"),字符分類(\w\Dqr/[[:punct:]]/))的行為就像沒有地區設置一樣,而是像 use feature 'unicode_strings' 一樣,只是遵循了責任規則。排序在此版本中仍按照代碼點順序進行。[perl #56820]。

use locale 現在可以在不具有地區能力的系統上編譯

以前這樣做會導致程序無法編譯。在其作用域內,程序的行為就像在“C”地區設置下一樣。因此,為支持地區的平台編寫的程序可以在沒有地區設置的平台上運行而無需更改。當然,試圖將地區設置更改為非“C”地區設置將失敗。

更多地區初始化回退選項

如果在 Perl 啟動期間出現區域設定錯誤,它將立即放棄並嘗試使用 "C" 區域。現在它首先嘗試使用環境變數給定的其他區域,詳細信息請參閱 "perllocale" 中的 "ENVIRONMENT"。例如,如果 LC_ALLLANG 都被設置,且使用 LC_ALL 區域失敗,Perl 現在將嘗試使用 LANG 區域,僅在該操作失敗後才會回退到 "C"。在 Windows 機器上,如果所有環境變數給定的區域失敗,Perl 將在使用 "C" 之前嘗試系統默認區域。

現在添加了 -DL 运行时选项用于跟踪區域設定

這是為了幫助 Perl 核心開發人員在現場調試有關區域的錯誤。

-F 現在意味著 -a,而 -a 意味著 -n

以前,沒有 -a-F 是無操作的,而沒有 -n-p-a 也是無操作的。有了這個改變,如果您提供了 -F,則會隱含使用 -a-n,如果您提供了 -a,則會隱含使用 -n

您仍然可以使用 -p 進行額外的行為。[perl #116190]

$a 和 $b 警告例外

sort 中使用的特殊變量 $a 和 $b 現在免於 "used once" 警告,即使 sort 沒有使用。這使得 CPAN 模塊更容易提供使用 $a 和 $b 進行相似用途的功能。[perl #120462]

安全性

在解析期間避免可能的 free() 記憶體讀取

在 Perl 程序以 heredoc 結束並且磁盤上的最後一行沒有終止的換行符的不尋常情況下,可能會讀取已釋放的記憶體。這現在已經修復。

不兼容的更改

do 現在不能用於調用子程序

自 Perl v5.0.0 以來,do SUBROUTINE(LIST) 形式已經產生過時警告,現在是語法錯誤。

類似引用跳脫字元的變更

在雙引號字串("..." 或 qq(...))或正規表示式中的 \c 後面的字元現在必須是可列印字元,不能是 {

\B\b 後面的文字 { 現在會導致致命錯誤。

這些在 perl v5.14.0 中已經被廢棄。

汙染發生在更多情況下;現在符合文件說明

這影響了正規表示式匹配和在 use locale 範圍內改變字符串大小寫(lc, "\U", 等等)。根據文件(perlsecperllocale 中的 "SECURITY")的說明,結果現在基於操作而被汙染,無論字符串的內容是什麼。以前,在大小寫變更操作中,如果字符串不包含任何可能受地域設置影響的字符,則結果將不被汙染。例如,對於空字符串或僅包含上拉丁1代碼點的字符串的 uc() 現在會被汙染,而以前不會。這導致了更一致的汙染結果。正規表示式模式會汙染其非二進制結果(如 $&, $2),僅當該模式包含依賴於當前(可能被汙染)地域的匹配元素時。與大小寫變更函數一樣,字符串的實際內容現在不再重要,而以前是。例如,如果模式包含 \w,則結果將被汙染,即使匹配不需要使用該模式的部分來成功或失敗,因為 \w 的匹配取決於地域。但是,例如,模式中的 . 不會啟用汙染,因為點匹配任何單個字符,而當前地域不會以任何方式改變匹配和不匹配。

\p{}, \P{} 的匹配方式已經改變,針對非 Unicode 代碼點。

\p{}\P{} 只在 Unicode 定義的代碼點(U+0000U+10FFFF)上被 Unicode 定義。 它們在匹配這些合法的 Unicode 代碼點時的行為保持不變,但是對於代碼點 0x110000 及以上的情況有所更改。 以前,Perl 將匹配 \p{}\P{} 得到的結果對待為 undef,這導致結果為“false”。 對於 \P{},這被補充為“true”。 當發生這種情況時,應該會發出警告。 但是,各種優化可能會防止出現警告,結果通常是反直覺的,匹配及其看似的補充都是 false。 現在,所有非 Unicode 代碼點都被視為典型的未分配 Unicode 代碼點。 這通常更符合 Do-What-I-Mean。 只有在結果與嚴格的 Unicode 方法可能不同以及與 Perl 以前的做法可能不同時才會發出警告。 需要嚴格遵守 Unicode 標準的代碼可以使此警告變為致命,然後 Perl 始終會發出警告。

詳細信息請參閱 "Beyond Unicode code points" in perlunicode

\p{All} 已擴展為匹配所有可能的代碼點

Perl 定義的正則表達式模式元素 \p{All},在 CPAN 上未使用,以前僅匹配 Unicode 代碼點; 現在它匹配所有可能的代碼點; 也就是說,它等同於 qr/./s。 因此,\p{All} 不再等同於 \p{Any}\p{Any} 繼續僅匹配 Unicode 代碼點,正如 Unicode 所說明的那樣。

Data::Dumper 的輸出可能會改變

根據 Data::Dumper 轉儲的數據結構和設置,轉儲的輸出可能與以前的版本不同。

如果您的測試取決於 Data::Dumper 的確切輸出,則可能會失敗。

為了避免這個問題,請在代碼中對比評估轉儲結構後的數據結構,而不是對比轉儲本身。

Locale decimal point character no longer leaks outside of use locale scope

這實際上是一個錯誤修正,但一些程式碼已經依賴於該錯誤的存在,因此此更改在此列出。程式執行時的當前語言環境不應該對 Perl 程式碼可見,除非在 use locale 範圍內。然而,直到現在,在某些情況下,用於小數點的字元(通常是逗號)會泄漏到範圍之外。如果您的程式碼受到此更改的影響,只需添加一個 use locale 即可。

將 Windows sockets 錯誤代碼分配給 $!,現在優先使用 errno.h 的值而不是 WSAGetLastError() 的值

在以前的 Perl 版本中,Windows sockets 錯誤代碼由 WSAGetLastError() 返回,並將其分配給 $!,而某些常數(如 VC++(或各種 Windows 版本的 gcc)中的 ECONNABORTED)未在 errno.h 中定義,但被定義為對應的 WSAE* 值,以便允許對 $! 進行 E* 常數的測試,這些常數由 ErrnoPOSIX 匯出。

這在之前的版本中運作良好,直到 VC++ 2010 及之後引入了新的 E* 常數並賦予值 > 100 到 errno.h 中,其中一些被 perl 重新定義為 WSAE* 值。這在將 XS 程式碼與其他使用原始 errno.h 常數定義的庫進行鏈接時導致問題。

為了避免此不相容性,perl 現在會將 WSAE* 錯誤代碼映射到可能的 E* 值,並將這些值分配給 $!。由 ErrnoPOSIX 匯出的 E* 常數已經更新以匹配,以便對其進行測試 $!,在先前可能的情況下,將繼續按預期工作,並且現在將 errno.h 中找到的所有 E* 常數以其原始 errno.h 值匯出。

為了避免現有的 Perl 程式碼中出現問題,將 WSAE* 值分配給 $!,perl 現在會攔截分配並執行與內部分配給 $! 本身時相同的映射到 E* 值的操作。

然而,仍然存在一個向後不相容性問題:現有的 Perl 代碼將 $! 與以前分配給 $! 的 WSAE* 錯誤碼的數值進行比較,將在已經分配了相應的 E* 值的情況下出現問題。對於那些 E* 值 < 100,這只是一個問題,這些值始終從 ErrnoPOSIX 中導出它們的原始 errno.h 值,因此不能用於 WSAE* 錯誤碼測試(例如,WSAEINVAL 是 10022,但相應的 EINVAL 是 22)。 (如果存在 E* 值 > 100,則已重新定義為 WSAE* 值,因此可以通過使用 E* 常量來實現兼容性,這將在此更改之前和之後都有效,儘管在底層使用不同的數值。)

函數 PerlIO_vsprintfPerlIO_sprintf 已被移除

這兩個函數沒有文檔,並且在 CPAN 中未使用,存在問題,因此已被移除。

已棄用項目

字符類別 /\C/

字符類別 /\C/ 的正則表達式已被棄用。從 perl 5.22 開始,它將產生警告,並且從 perl 5.24 開始,它將成為正則表達式編譯器錯誤。如果您需要檢查構成 UTF8 編碼字符的個別字節,則首先對字符串(或其副本)使用 utf8::encode()

變量名中的文字控制字符

此棄用項目會影響到類似 $\cT 的東西,其中 \cT 是源代碼中的文字控制(例如 NAKNEGATIVE ACKNOWLEDGE 字符)。令人驚訝的是,最初這似乎是訪問像 $^T 這樣的變量的規範方式,而插入符號形式只是作為一種替代方式添加的。

文字控制形式之所以被棄用,主要有兩個原因。它們可能存在無法修復的錯誤,例如 $\cI 未作為 $^I 的別名工作,而且它們的使用不可移植到非 ASCII 平台:雖然 $^T 將在所有地方都起作用,但 \cT 在 EBCDIC 中是空格。 [perl #119123]

$/ 中引用非整數和非正整數

$/ 設置為零的引用或負整數的引用現在已被棄用,並且將 完全 與設置為 undef 的行為相同。如果您希望實現吸入行為,請將 $/ 明確設置為 undef

設定 $/ 為非整數的參照現已被禁止,並將引發錯誤。Perl 從未記錄在此情況下會發生什麼,雖然它曾經的行為與將來將會如何設定 $/ 為參照的地址相同,但我們已禁止此用法。

POSIX 中的字元匹配例程

POSIX 模組中使用以下任何函數現已被棄用:isalnum, isalpha, iscntrl, isdigit, isgraph, islower, isprint, ispunct, isspace, isupperisxdigit。這些函數存在錯誤並且無法在 UTF-8 編碼的字串上正常工作。有關更多信息,請參閱它們在 POSIX 中的條目。

在代碼中的每個調用它們的地方,第一次調用任何一個函數都會引發警告。(因此,在循環中的重複語句將僅引發一次警告。)

基於解釋器的線程現已不再鼓勵使用

Perl 提供的“基於解釋器的線程”並不是人們可能期望或希望的快速、輕量級的多任務系統。線程的實現方式使它們容易被誤用。很少有人知道如何正確使用它們或能夠提供幫助。

在 perl 中使用基於解釋器的線程現已正式不再鼓勵使用

模組移除

以下模組將在將來的版本中從核心發行版中移除,屆時將需要從 CPAN 安裝。在 CPAN 上需要這些模組的發行版將需要將它們列為先決條件。

這些模組的核心版本現在將發出“棄用”類別的警告,以提醒您此事實。要消除這些棄用警告,請從 CPAN 安裝相應的模組。

請注意,這些模組從核心中移除的計劃不反映代碼質量的判斷,也不應該被解釋為建議停止使用它們。它們從核心中移除主要取決於它們對啟動一個完全功能的、支持 CPAN 的 Perl 安裝的必要性,而不是對其設計的考慮。

CGI 及其相關的 CGI:: 包
inc::latest
Package::Constants
Module::Build 及其相關的 Module::Build:: 包

實用工具移除

以下實用工具將在未來的版本中從核心發行版中移除,屆時將需要從 CPAN 安裝。

find2perl
s2p
a2p

效能增強

模組與 pragma

新模組與 pragma

已更新的模組與 pragma

文件

新文件

perlrepository

這份文件已被移除(實際上,被重新命名為 perlgit,並且經過大幅改版),在 Perl v5.14 中導致 Perl 文件網站顯示 Perl v5.12 中現已過時的版本為最新版本。現已以草稿形式恢復,指引讀者前往查閱最新資訊。

現有文件的變更

perldata

perldebguts

perlexperiment

perlfunc

perlguts

perlhack

perlhacktips

perllexwarn

perllocale

perlop

perlopentut

perlre

perlreguts

perlsub

perltrap

perlunicode

perlvar

perlxs

診斷

對診斷輸出(包括警告和致命錯誤消息)進行了以下新增或更改。完整的診斷消息列表,請參見 perldiag

新增診斷

新增錯誤

新增警告

現有診斷的更改

實用程序變更

a2p

bisect.pl

git 二分搜索工具 Porting/bisect.pl 已經進行了許多增強。

它作為源代碼分發的一部分提供,但未安裝,因為它不是獨立的,它依賴於從 git 檢出中運行。同時請注意,它不會嘗試修復測試、糾正運行時錯誤或製作一些有用的安裝程序 - 它的目的是進行最小程度的更改,以使任何感興趣的歷史修訂版本盡可能接近“原樣”地構建和運行,從而使 git bisect 容易使用。

find2perl

perlbug

配置和編譯

測試

平台支援

新增平台

Android

現在可以為 Android 架構(ARM、MIPS 和 x86)上的所有三個當前版本進行本機或通過交叉編譯構建 Perl,在各種版本上都可以。

Bitrig

已添加對 Bitrig 的編譯支援,這是 OpenBSD 的一個分支。

FreeMiNT

已添加對 FreeMiNT 的支援,這是 Atari ST 系統及其後續版本的一個免費開源操作系統,基於官方採用的原始 MiNT。

Synology

Synology 將其 NAS 箱子配備了一個精簡的 Linux 發行版(DSM),運行在相對便宜的 CPU 上(例如 Marvell Kirkwood mv6282 - ARMv5tel 或 Freescale QorIQ P1022 ppc - e500v2),並非用於工作站或開發。這些箱子現在應該可以構建了。基本問題是工具的非標準位置。

已停用的平台

sfio

已移除支援 sfio I/O 系統的相關程式碼。

Perl 5.004 新增了對使用 AT&T 的 Safe/Fast I/O library (sfio) 的本機 API 的支援。這段程式碼仍然可以在 v5.8.0 中建置,但有許多回歸測試失敗,並在 v5.8.1 釋出之前不小心破壞了,這意味著它自那時以來在任何釋出的 Perl 版本上都無法運作。在十多年的時間裡,我們沒有收到關於這個問題的任何錯誤回報,因此顯然沒有人在任何仍受到任何程度支援的 Perl 版本上使用這個功能。

AT&T 3b1

已移除對 3b1 的配置支援,也就是 AT&T Unix PC(以及類似的 AT&T 7300)。

DG/UX

DG/UX 是由 Data General 銷售的 Unix。最後一個釋出版本於 2001 年 4 月。它僅運行於 Data General 自家的硬體上。

EBCDIC

在缺乏定期的煙霧回報的情況下,用於支援本機 EBCDIC 平台的程式碼將在 Perl 5.22.0 之前被移除。

平台特定注意事項

Cygwin
  • 在已連接的處理序上使用 recv() 將填充返回的發送者地址,該地址將填充工作緩衝區中的任何內容。現在,當 recvfrom(2) 不修改提供的地址長度時,recv() 現在使用類似於 Win32 recv() 包裝器的解決方法並返回一個空字符串。[perl #118843]

  • 修復了 Cygwin 1.7.28 上的 cygwin.c 中的編譯錯誤。

    現在測試處理當 cygserver 未運行時發生的錯誤。

GNU/Hurd

BSD 相容性庫 libbsd 不再需要進行建置。

Linux

提示文件現在僅在也要求 libgdbm 的情況下才尋找 libgdbm_compat。前者沒有後者永遠是無用的,在某些情況下,包括它實際上可能會阻止建置。

Mac OS

建置系統現在尊重由運行 Configure 的使用者提供的 ld 設定。

MidnightBSD

objformat 在 MidnightBSD 的 0.4-RELEASE 版本中被移除,並且在早期版本中已經被棄用。這導致構建環境錯誤地配置為 a.out 而不是 elf。這已經被修正。

混合字節序平台

已經移除了對混合字節序平台上的 packunpack 操作的代碼支持。我們相信 Perl 早已無法在混合字節序架構上構建(例如 PDP-11),因此我們不認為此更改會影響到能夠構建 v5.18.0 的任何平台。

VMS
  • 控制 perl 啟動時 %ENV 填充的 PERL_ENV_TABLES 功能在 Perl 5.16.0 中失效,但現在已經修復。

  • 在 opendir() 中跳過對遠程訪問的訪問檢查。[perl #121002]

  • 通過 VMS 通配符字符替換在 glob() 運算子返回的路徑中的 glob 元字符的檢查。這樣可以節省大量不必要的 lstat() 調用,使一些簡單的 glob 操作變快 60-80%。

Win32
  • 在 Win32 上,renamelink 現在在適當時將 $! 設置為 ENOSPC 和 EDQUOT。[perl #119857]

  • 用於將一些或(幾乎)所有擴展靜態鏈接(到 perl520.dll,以及到單獨的 perl-static.exe)的 BUILD_STATIC 和 ALL_STATIC makefile 選項在 MinGW 構建中失效。這已經修復。

    ALL_STATIC 選項還改進為包括 Encode 和 Win32 擴展(對於 VC++ 和 MinGW 構建)。

  • 添加了使用 Visual C++ 2013 構建的支持。目前存在兩種可能的測試失敗(請參見 "Testing Perl on Windows" in perlwin32),希望能盡快解決。

  • 添加了使用 Intel C++ Compiler 構建的實驗性支持。可以使用 nmake makefile(win32/Makefile)和 dmake makefile(win32/makefile.mk)。由於 cpan/CGI/t/url.t,"nmake test" 目前無法通過。

  • 使用 perlfunc 中的 "kill" 和負信號殺死進程樹,在 5.18.0 中開始失效。在這個錯誤中,kill 對於負信號始終返回 0,即使對於有效的 PID 也是如此,並且不會終止任何進程。這已經被修復 [perl #121230]。

  • 在 Windows 上構建 perl 所需的時間顯著減少(通常可以節省約 30-40% 的時間),這是通過減少每個 require()(僅對於 miniperl.exe)的 I/O 調用次數(通常失敗的)來實現的。 [GH #13566]

  • 由於一個 bug,使得測試所用的超時監視器在測試完成後無法取消,且在運行下一個測試文件之前完整的超時期間過去,因此在執行 make test 時,約有 15 分鐘的閒置睡眠時間被移除。 [GH #13647]

  • 在沒有虛擬分叉的 perl 環境中(虛擬分叉的建置不受此 bug 影響),使用 kill() 函數並使用負訊號來殺死一個進程樹導致 kill() 函數反轉返回值。例如,如果 kill() 函數殺死了一個進程樹的 PID,則返回值不是 1,而是 0;如果 kill() 函數傳入了 2 個無效的 PID,則返回值不是 0,而是 2。這個問題很可能存在於 Win32 上實現進程樹殺死功能時。現在已經根據文件記錄的行為進行了修正。 [GH #13595]

  • 在建置 64 位元 perl 時,建置過程中使用的 miniperl.exe 出現未初始化的記憶體讀取,可能導致創建一個 4GB 的 wperl.exe。這個問題現在已經修復。(請注意,perl.exe 本身不受影響,但顯然 wperl.exe 會完全失效。) [GH #13677]

  • 現在可以使用 gcc 版本 4.8.1 從 http://www.mingw.org 建置 Perl。這之前因為 perl 的一個源代碼文件中 DllMain() 的定義錯誤而無法建置。使用 w32api 套件的版本 4 時,之前的 gcc 版本也受到影響。從 http://mingw-w64.sourceforge.net/ 獲得的 gcc 版本不受影響。 [GH #13733]

  • 當 Perl 在 FAT 驅動器上建置,而 Windows 作業系統在 NTFS 驅動器上時,測試工具現在不再失敗。 [GH #6348]

  • 在模擬 fork() 中克隆上下文堆棧時,Perl_cx_dup() 函數會因為無參數的上下文堆棧條目(如 &foo;)而崩潰。 [GH #13763]

  • [GH #12161] 引入的一個問題,在大多數 Win32 Perl 從 5.18.0 開始的版本中,每次調用 system 和反引號( `` )時都會有內存泄漏。如果在 Win32 Perl 的版本中啟用了虛擬分叉並在 Server 2003 R2 或更新的作業系統上運行,則會出現內存泄漏。在 WinXP SP3 上不會出現這種泄漏。 [GH #13741]

WinCE
  • 大部分 XS 模組的建置已經大幅修復。有幾個仍然無法(暫時)建置,但現在已經可以僅需進行少量進一步的修補(對 SocketExtUtils::MakeMaker),希望很快能夠納入。

  • 現在可以透過執行 nmake -f Makefile.ce all 在 WinCE 上一次性地建置 Perl,無需使用者干預。

    已經恢復了使用 EVC (Embedded Visual C++) 4 進行建置的支援。Perl 也可以使用 Smart Devices for Visual C++ 2005 或 2008 進行建置。

內部變更

選擇性錯誤修復

正則表達式

Perl 5 調試器和 -d

Lexical 子程序

其他所有事項

已知問題

訃聞

2014年5月10日,里約熱內盧的Diana Rosa,27歲,與她總是掛在電腦螢幕上的毛絨駱駝一起長眠。她是一位熱情的Perl駭客,熱愛這門語言及其社區,從不錯過里約Perl開發者聚會。她是一位真正的藝術家,對編寫代碼、演唱詠嘆調和在牆上塗鴉充滿熱情。我們永遠不會忘記你。

Greg McCarroll於2013年8月28日離世。

Greg以許多良好的理由而聞名。他是第一屆YAPC::歐洲的組織者之一,該會議以一場不計劃的拍賣會結束,他在那裡拼命試圖籌集額外的資金,以避免會議損失。Greg誤會了一個倫敦Perl開發者聚會,誤到了一個星期晚; 幾年後,他是在YAPC::歐洲拍賣會上出售正式會議日期選擇的人,最終作為倫敦Perl開發者聚會的光榮領袖,他繼承了他所創造的那種不敬的混亂。

他總是樂於助人,友好和樂觀,你會被想念的,但永遠不會被遺忘。

致謝

Perl 5.20.0 自Perl 5.18.0以來經過約12個月的開發,跨越了124位作者的約2,900個文件,包含約470,000行的變更。

除自動生成的文件、文檔和發行工具外,約有280,000行的變更作用於1,800個.pm、.t、.c和.h文件。

Perl由一個充滿活力的用戶和開發者社區,在第三個十年中不斷茁壯。以下人士已知為Perl 5.20.0的改進作出了貢獻。

Aaron Crane、Abhijit Menon-Sen、Abigail、Abir Viqar、Alan Haggai Alavi、Alan Hourihane、Alexander Voronov、Alexandr Ciornii、Andy Dougherty、Anno Siegel、Aristotle Pagaltzis、Arthur Axel 'fREW' Schmidt、Brad Gilbert、Brendan Byrd、Brian Childs、Brian Fraser、Brian Gottreu、Chris 'BinGOs' Williams、Christian Millour、Colin Kuskie、Craig A. Berry、Dabrien 'Dabe' Murphy、Dagfinn Ilmari Mannsåker、Daniel Dragan、Darin McBride、David Golden、David Leadbeater、David Mitchell、David Nicol、David Steinbrunner、Dennis Kaarsemaker、Dominic Hargreaves、Ed Avis、Eric Brine、Evan Zacks、Father Chrysostomos、Florian Ragwitz、François Perrad、Gavin Shelley、Gideon Israel Dsouza、Gisle Aas、Graham Knop、H.Merijn Brand、Hauke D、Heiko Eissfeldt、Hiroo Hayashi、Hojung Youn、James E Keenan、Jarkko Hietaniemi、Jerry D. Hedden、Jess Robinson、Jesse Luehrs、Johan Vromans、John Gardiner Myers、John Goodyear、John P. Linderman、John Peacock、kafka、Kang-min Liu、Karen Etheridge、Karl Williamson、Keedi Kim、Kent Fredric、kevin dawson、Kevin Falcone、Kevin Ryde、Leon Timmermans、Lukas Mai、Marc Simpson、Marcel Grünauer、Marco Peereboom、Marcus Holland-Moritz、Mark Jason Dominus、Martin McGrath、Matthew Horsfall、Max Maischein、Mike Doherty、Moritz Lenz、Nathan Glenn、Nathan Trapuzzano、Neil Bowers、Neil Williams、Nicholas Clark、Niels Thykier、Niko Tyni、Olivier Mengué、Owain G. Ainsworth、Paul Green、Paul Johnson、Peter John Acklam、Peter Martini、Peter Rabbitson、Petr Písař、Philip Boulain、Philip Guenther、Piotr Roszatycki、Rafael Garcia-Suarez、Reini Urban、Reuben Thomas、Ricardo Signes、Ruslan Zakirov、Sergey Alekseev、Shirakata Kentaro、Shlomi Fish、Slaven Rezic、Smylers、Steffen Müller、Steve Hay、Sullivan Beck、Thomas Sibley、Tobias Leich、Toby Inkster、Tokuhiro Matsuno、Tom Christiansen、Tom Hukins、Tony Cook、Victor Efimov、Viktor Turskyi、Vladimir Timofeev、YAMASHINA Hio、Yves Orton、Zefram、Zsbán Ambrus、Ævar Arnfjörð Bjarmason。

上述名單幾乎肯定是不完整的,因為它是從版本控制歷史自動生成的。特別是,它不包括向 Perl Bug 追踪器報告問題的(非常感謝)貢獻者的名字。

這個版本中包含的許多更改來自於 Perl 核心中包含的 CPAN 模塊。我們感謝整個 CPAN 社區幫助 Perl 蓬勃發展。

有關 Perl 所有歷史貢獻者的更完整列表,請參見 Perl 源代碼發行版中的 AUTHORS 文件。

報告 Bug

如果您發現您認為是 bug,您可以查看最近發布在 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 文件。

版權信息,請參閱 ArtisticCopying 文件。