內容

名稱

perl5300delta - Perl v5.30.0 的新功能

描述

本文件描述了 5.28.0 版本和 5.30.0 版本之間的差異。

如果您從較早版本(如 5.26.0)升級,請先閱讀 perl5280delta,該文件描述了 5.26.0 和 5.28.0 之間的差異。

注意

sv_utf8_(downgrade|decode) 不再標記為實驗性功能。 [GH #16822]

核心增強

現在實驗性地支援正則表達式模式匹配中的有限長度後向查找

以後向斷言(如 (?<=foo?)(?<!ba{1,9}r))之前會產生錯誤並拒絕編譯。 現在,它會編譯(如果最大後向查找最多為 255 個字符),但在新的 experimental::vlb 警告類別中引發警告。 這是為了提醒您,根據來自現場使用的反饋,行為可能會有所變化。

請參閱 perlre 中的 "(?<=pattern)"perlre 中的 "(?<!pattern)"

正規表達式量詞形式 "{m,n}" 中可指定的上限 "n" 已增加到 65534

未限定上限量詞 "{m,}" 的含義保持不變。 在大多數平台上,它匹配 2**31 - 1 次,而在 C 語言短變量長度超過 4 個字節的平台上,匹配次數更多。

Unicode 12.1 is supported

由於Unicode發行週期的更改,Perl從Perl 5.28中的Unicode 10.0跳至Perl 5.30中的Unicode 12.1。

有關Unicode變更的詳細信息,請參閱https://www.unicode.org/versions/Unicode11.0.0/(11.0版本);https://www.unicode.org/versions/Unicode12.0.0/(12.0版本);以及https://www.unicode.org/versions/Unicode12.1.0/(12.1版本)。 (Unicode 12.1與12.0只有一個字符的增加,即新的日本時代名稱。)

與過去的Perl版本一樣,Word_Break屬性仍然被定制為更符合Perl用戶的期望。這意味著水平空白字符的連續運行不會被分開,而是保持為一個運行。 Unicode 11從過去的版本中更改為與Perl更符合,但它將幾個空格字符作為斷裂引起:TAB、NO BREAK SPACE和FIGURE SPACE(U+2007)。我們決定繼續使用對這些字符的以前的Perl定制。

Unicode屬性值規範中的萬用字符現在部分受支持

您現在可以在正則表達式模式中執行以下操作

qr! \p{nv= /(?x) \A [0-5] \z / }!

它匹配數值介於0到5之間(包括0和5)的所有Unicode代碼點。因此,它可以匹配數值為0、1、2、3、4或5的泰語或孟加拉數字。

這標誌著實施Unicode Consortium建議的正則表達式功能的又一步。

大多數屬性都受支持,其餘部分計劃在5.32中支持。詳細信息請參見perlunicode中的“屬性值中的萬用字符”

qr'\N{name}'現在受支持

以前,在單引號正則表達式模式中(其評估從正常位置推遲),評估命名字符\N{...}是一個錯誤。現在已經取消了這個限制。

突厥語UTF-8地區現在得到了無縫支持

突厥語言與其他語言的大小寫規則不同,對於字符 "i""I""i" 的大寫是LATIN CAPITAL LETTER I WITH DOT ABOVE(U+0130);而 "I" 的小寫是LATIN SMALL LETTER DOTLESS I(U+0131)。Unicode 提供了用於突厥語言的替代大小寫規則。以前,Perl 忽略了這些規則,但現在,在檢測到處於突厥 UTF-8 地區設置下運行時,它會使用這些規則。

現在可以編譯 Perl 以始終使用線程安全的地區操作。

以前,這些調用僅在 Perl 編譯為多線程時使用。要始終啟用它們,請添加

-Accflags='-DUSE_THREAD_SAFE_LOCALE'

到您的 Configure 標誌。

從核心中消除 opASSIGN 宏的使用

此宏仍被定義,但不再在核心中使用

-Drv 現在在 -DDEBUGGING 構建中有意義

現在,將冗長標誌(-Dv)添加到 -Dr 標誌將打開所有可能的正則表達式調試。

不相容的更改

將非零賦值給 $[ 是致命的

自 Perl 5.12 起,設置 $[ 為非零值已被廢棄,現在將引發致命錯誤。參見 "將非零賦值給 $[ 是致命的" 在 perldeprecation 中

分隔符現在必須是字形元素

參見 "在正則表達式中使用未分配的代碼點或非獨立字形元素作為分隔符。" 在 perldeprecation 中

以前曾被廢棄的一些在正則表達式模式中未轉義的左大括號 "{" 使用現在是非法的

為了避免不必要地破壞代碼,大多數發出廢棄警告的實例現在仍然是合法的,並且現在會發出非廢棄警告。參見 "正則表達式中的未轉義左大括號" 在 perldeprecation 中

以前已廢棄的在 :utf8 處理器上使用 sysread()/syswrite() 現在是致命的

在一個:utf8處理程序上呼叫sysread()、syswrite()、send()或recv(),無論是明確應用還是隱含應用,現在都會導致致命錯誤。這在perl 5.24中已被棄用。

:utf8處理程序上調用這些函數存在兩個問題

[GH #14839].

在假條件中禁止my()

my $x if 0等聲明不再被允許。

[GH #16702].

使$*和$#致命

這些特殊變量,長期被棄用,現在在使用時會拋出異常。

[GH #16718].

使未經限定的dump()使用致命

dump()函數,長期不建議使用,除非完全限定,即CORE::dump(),否則將不再被使用。

[GH #16719].

移除File::Glob::glob()

已移除長期棄用的File::Glob::glob()函數,現在會拋出一個異常,建議使用File::Glob::bsd_glob()代替。

[GH #16721].

pack()不再能返回格式不正確的UTF-8

如果它否則會返回包含格式不正確的UTF-8的UTF-8字符串,它將發出croak。這可以保護免受潛在的安全威脅。這也被認為是一個bug修復。 [GH #16035]

在通用腳本中有幾組數字集。 [0-9] 是最熟悉的。但還有 [\x{FF10}-\x{FF19}](全角數字零至九),以及幾組用於數學表示法的集合,例如數學雙字形數字。這些集合中的任何一組都應該能夠出現在腳本運行中,例如希臘文。但 5.30 的設計忽略了除了 ASCII 數字 [0-9] 以外的所有內容,因此該設計存在缺陷。這已經修復,因此這既是一個錯誤修正,也是一個不相容性。 [GH #16704].

一個運行中的所有數字仍然必須來自同一組十個數字。

JSON::PP 默認啟用 allow_nonref

由於 JSON::XS 4.0 改變了其策略並默認啟用 allow_nonref,因此 JSON::PP 也默認啟用 allow_nonref。

已棄用功能

在 XS 代碼中,使用與 UTF-8 相關的各種宏。

此功能已計劃在 5.30 中變為致命,但由於一些 CPAN 模塊出現了問題,已延遲到 5.32。有關受影響內容的詳細信息,請參見 perldeprecation

性能增強

模組與 Pragmata

已更新的模組與 Pragmata

已移除的模組和Pragmata

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

這些模組的核心版本現在將發出"deprecated"類別的警告,以通知您這一事實。要消除這些棄用警告,請從CPAN安裝相應的模組。

請注意,這些(除了極少數例外)都是優秀的模組,鼓勵您繼續使用。它們從核心中排除的主要原因主要是它們對啟動完全功能、支持CPAN的Perl安裝的必要性,通常不是對其設計的考慮。

文件

現有文件的更改

我們已嘗試更新文件以反映此文件中列出的更改。如果您發現我們漏掉了任何內容,請發送電子郵件至 perlbug@perl.org

perlapi

perlop

perlreapiperlvar

perlfunc

perlreref

perllocale

perlrecharclass

perlvar

診斷

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

現有診斷的更改

效用變更

xsubpp

配置和編譯

測試

平台支援

平台特定說明

HP-UX 11.11

使用HP C-ANSI-C編譯時pack()中的一個微妙問題已通過在pp_pack.c中禁用優化來修復。

Mac OS X

Perl在Mac OS X上進行-Duseshrplib建構時的建構和測試過程現在與Mac OS X系統完整性保護(SIP)兼容。

SIP防止在/bin(和其他幾個地方)的二進制文件中傳遞DYLD_LIBRARY_PATH環境變量。就我們的目的而言,這阻止了DYLD_LIBRARY_PATH被傳遞到shell,從而防止該變量被傳遞到測試或建構過程中,因此運行perl找不到libperl.dylib

為了解決這個問題,初始的perl可執行文件的建構期望在建構目錄中找到libperl.dylib,然後在安裝期間調整庫路徑以指向已安裝的庫。

[GH #15057].

Minix3

重新添加了對Minix3的部分支持。

Cygwin

Cygwin不會使cuserid可見。

Win32 Mingw

C99數學函數現在可用。

Windows
  • win32/Makefile(对于 nmake)和 win32/makefile.mk(对于 dmake)中长期可用的 USE_CPLUSPLUS 构建选项,现在也可在 win32/GNUmakefile(对于 gmake)中使用。

  • nmake 的 makefile 不再默认为 Visual C++ 6.0(一种很旧的版本,不太可能被广泛使用)。因此,现在需要指定 CCTYPE,因为没有明显的选择可以默认为哪个现代版本。未指定 CCTYPE 将导致输出错误并停止构建。

    dmakegmake 的 makefile 将自动检测正在使用的编译器,因此不需要设置 CCTYPE。此功能尚未添加到 nmake 的 makefile。)

  • 在启用警告的情况下,使用 USE_IMP_SYS 构建的 sleep() 不再警告睡眠超时时间过长。 [GH #16631]

  • 支持使用 Microsoft Visual Studio 2019(包含 Visual C++ 14.2)在 Windows 上编译 perl 已添加。

  • 如果协议、地址族和套接字类型的组合未找到,socket() 现在会设置 $![GH #16849]

  • 在 Perl 5.27.9 中,意外地破坏了 Windows Server 2003 SP1 平台 SDK 构建,其中包含早期的 x64 编译器和工具。现在已修复。

内部更改

已選擇的錯誤修正

致謝

Perl 5.30.0 自 Perl 5.28.0 以來大約經過了 11 個月的開發,包含大約 58 位作者在 1,300 個文件中進行了約 620,000 行的更改。

在排除自動生成的文件、文檔和發行工具後,對 750 個 .pm、.t、.c 和 .h 文件進行了約 510,000 行的更改。

Perl 因為一個充滿活力的使用者和開發者社群,在其第四個十年裡持續蓬勃發展。以下人員被知道為 Perl 5.30.0 的改進做出貢獻:

Aaron Crane、Abigail、Alberto Simões、Alexandr Savca、Andreas König、Andy Dougherty、Aristotle Pagaltzis、Brian Greenfield、Chad Granum、Chris 'BinGOs' Williams、Craig A. Berry、Dagfinn Ilmari Mannsåker、Dan Book、Dan Dedrick、Daniel Dragan、Dan Kogai、David Cantrell、David Mitchell、Dominic Hargreaves、E. Choroba、Ed J、Eugen Konkov、François Perrad、Graham Knop、Hauke D、H.Merijn Brand、Hugo van der Sanden、Jakub Wilk、James Clarke、James E Keenan、Jerry D. Hedden、Jim Cromie、John SJ Anderson、Karen Etheridge、Karl Williamson、Leon Timmermans、Matthias Bethke、Nicholas Clark、Nicolas R.、Niko Tyni、Pali、Petr Písař、Phil Pearl(Lobbes)、Richard Leach、Ryan Voots、Sawyer X、Shlomi Fish、Sisyphus、Slaven Rezic、Steve Hay、Sullivan Beck、Tina Müller、Tomasz Konojacki、Tom Wyant、Tony Cook、Unicode Consortium、Yves Orton、Zak B. Elep。

上述列表幾乎肯定是不完整的,因為它是從版本控制歷史自動生成的。特別是,它不包括大多數(非常感激)向 Perl Bug 追踪器報告問題的貢獻者的名字。值得注意的是,在此版本中,許多由於 Sergey Aleynikov 使用 AFL 進行模糊測試而發現的問題,而由他的高品質 perlbug 報告所可能的大量錯誤修正。

本版本中包含的許多變更源於 Perl 核心中包含的 CPAN 模組。我們感謝整個 CPAN 社群幫助 Perl 蓬勃發展。

要查看 Perl 的所有歷史貢獻者的更完整列表,請參閱 Perl 源分發中的 AUTHORS 文件。

報告錯誤

如果您發現了您認為是一個錯誤,您可以檢查 perl 的 bug 數據庫,網址是 https://rt.perl.org/。您也可能在 Perl 官方網站 http://www.perl.org/ 上找到相關資訊。

如果您認為您發現了一個未報告的錯誤,請運行隨附於您的發行版中的 perlbug 程式。請確保將您的錯誤減少到一個足夠小但又足夠的測試案例。您的錯誤報告以及 perl -V 的輸出將被發送到 perlbug@perl.org 以供 Perl 移植團隊進行分析。

如果您報告的錯誤具有安全性影響,使其不適合發送到公開存檔的郵件列表,那麼請參閱 perlsec 中的“SECURITY VULNERABILITY CONTACT INFORMATION” 以了解如何報告問題的詳細信息。

感謝

如果您希望感謝 Perl 5 移植團隊在 Perl 5 中所做的工作,您可以運行 perlthanks 程式。

perlthanks

這將向 Perl 5 移植團隊列表發送一封感謝函。

參見

Changes 文件以獲取有關如何查看詳細更改的解釋。

INSTALL 文件以了解如何構建 Perl。

README 文件以獲取一般資訊。

ArtisticCopying 文件以獲取版權信息。