パール木本のPerlテックブログ

世界的プロジェクトに携わるPerlプログラマー「パール木本」のテックブログ。書籍「業務に役立つPerl」,ユーチューバー, 木本システム代表取締役社長。

Perl 5.32 リリース - Unicode 13.0, 連鎖比較, isa演算子, sort高速化, trバグ修正

Perl 5.32 がリリースされました。

 

Unicode 13.0, 連鎖比較, isa演算子, sort高速化, trの255以上のコードポイントを含んでいる場合のバグ修正など。

Perlの開発場所がGithubに移り、Github Actionで自動試験を行っていることも、今回のPerlリリースの特徴ですね。

以下はPerlの機能追加・変更点が書かれているperldeltaの自動翻訳です。

名前

perldelta-perl v5.32.0の新機能

説明

このドキュメントでは、5.30.0リリースと5.32.0リリースの違いについて説明します。

あなたは、5.28.0、最初の読み出しなど、以前のリリースからアップグレードする場合はperl5300delta 5.28.0と5.30.0の違いについて説明し、。

コアの機能強化

isaオペレーター

と呼ばれる新しい実験的な中置演算子はisa、特定のオブジェクトが特定のクラスのインスタンスであるか、それから派生したクラスであるかをテストします。

if( $obj isa Package::Name ) { ... }

詳細については、perlopの「クラスインスタンスオペレーター」を参照してください。

Unicode 13.0がサポートされています

詳細については、https://www.unicode.org/versions/Unicode13.0.0/を参照してください。

連鎖比較機能

一部の比較演算子は、その関連性として、同じ優先順位のいくつかの演算子と連鎖します(ただし、異なる優先順位の演算子と決して連鎖しません)。

if ( $x < $y <= $z ) {...}

次のように動作します:

if ( $x < $y && $y <= $z ) {...}

"$y"見た目と同じくらい単純なスカラーであると仮定します。)

これについて詳しくは、perlop「Operator Precedence and Associativity」のperlopを参照してください

新しいUnicodeプロパティIdentifier_StatusIdentifier_Typeサポート

Unicodeは、正規表現の要件(https://www.unicode.org/draft/reports/tr18/tr18.html)を改訂中です。その一部として、より多くのプロパティを公開する必要があります。厳密なUCD(Unicode文字データベース)の一部ではないプロパティです。これら2つは、セキュリティ上の目的で入力を調べるために使用されます。それらの使用方法の詳細は、https://www.unicode.org/reports/tr39/proposed.htmlにあります

これでqr/\p{Name=...}/、またはqr!\p{na=/(SMILING|GRINNING) FACE/}!

Unicode Nameプロパティは、の代わりに、正規表現パターンでアクセスできるようになりました\N{...}。2つの方法の比較は、perlunicodeの「\ N {...}と\ p {name = ...}の比較」に記載されています。

上記の2番目の例は、ワイルドカードサブパターンもこのプロパティで使用できることを示しています。perlunicodeの「プロパティ値のワイルドカード」を参照してください。

改善POSIX::mblen()mbtowcおよびwctomb

POSIX::mblen()mbtowc、およびwctomb機能シフト状態ロケールに今仕事とロケールスレッド安全性を有しているプラットフォーム上で実行されるときC99と上記コンパイラにスレッドセーフです。長さパラメーターはオプションになりました。

これらの関数は常に現在のC言語ロケールで実行されます。(perllocaleを参照してください。)ほとんどのロケールはステートレスですが、いくつか、特にめったに発生しないISO 2022は、これらの関数の呼び出し間で状態を維持します。以前は、すべての呼び出しで状態がクリアされていましたが、適切なパラメーターがでない限り、状態はリセットされませんundef

スレッド化されたperlでは、C99関数mbrlen(3)mbrtowc(3)、およびwcrtomb(3)が利用可能な場合、プレーン関数の代わりに使用されます。これにより、これらの関数は、ロケールのスレッドセーフプラットフォームで実行するときにスレッドセーフになります。

文字列の長さのパラメータmblenとは、mbtowcオプションになりました。ソース文字列で解析される長さを実際の長さより短く制限したい場合にのみ役立ちます。

アルファ表明は実験的ではなくなりました

参照はperlreで: "(パターン* PLA)"はperlreで: "(パターン* PLB)"はperlreで: "(パターン* NLA)" >と、"(* NLB:パターン)"はperlreでを。これらを使用しても警告は生成されなくなりました。警告カテゴリを無効にする既存のコードは、experimental::alpha_assertions変更を必要とせずに引き続き機能します。カテゴリを有効にしても効果はありません。

スクリプトの実行は実験的ではなくなりました

perlreの「Script Runs」を参照してください。これらを使用しても警告は生成されなくなりました。警告カテゴリを無効にする既存のコードは、experimental::script_run変更を必要とせずに引き続き機能します。カテゴリを有効にしても効果はありません。

機能チェックがより速くなりました

以前は、機能が機能バンドルの外部で設定されている場合、パーサーでの機能チェックでハッシュルックアップが必要でしたが、これはビットマスクチェックに最適化されています。[ GH#17229 ]

PerlがGitHubで開発されました

Perlは現在GitHubで開発されています。https://github.com/Perl/perl5にアクセスしてください

セキュリティ以外のバグはGitHub経由で報告されるようになりました。セキュリティの問題はperlsecで文書化されているように引き続き報告されるべきです

コンパイルされたパターンを最適化前にダンプできるようになりました

これは主に、正規表現コンパイラのバグを追跡するのに役立ちます。コマンドラインで-DDEBUGGING指定-Drvした場合、このダンプはperlで発生します。または任意のPerl上のパターンは、の範囲内でコンパイルされている場合use re qw(Debug DUMP_PRE_OPTIMIZE)、またはuse re qw(Debug COMPILE EXTRA)。(2番目のケースを除くすべてに、他の情報も表示されます。)

安全保障

[CVE-2020-10543]細工された正規表現が原因のバッファオーバーフロー

size_tネストされた正規表現数量詞のストレージスペース計算での符号付き整数オーバーフローは、正規表現ストレージスペースの後に割り当てられたメモリを攻撃者が提供したデータで上書きするPerlの正規表現コンパイラでヒープバッファオーバーフローを引き起こす可能性があります。

ターゲットシステムは、オーバーフローが発生する前に、ネストされた数量詞の部分的な拡張を割り当てるために十分な量のメモリを必要とします。この要件は、64ビットシステムでは満たされない可能性があります。

発見者:タランチュラチームのManhND、VinCSS(Vingroupのメンバー)。

[CVE-2020-10878]細工された正規表現によって生成された不正な形式のバイトコードによる整数オーバーフロー

正規表現エンジンの命令間のオフセットの計算で整数オーバーフローが発生すると、コンパイルされた正規表現の中間言語状態が破損する可能性があります。攻撃者はこの動作を悪用して、コンパイルされた形式のPerl正規表現に命令を挿入する可能性があります。

発見者:Hugo van der SandenおよびSlaven Rezic。

[CVE-2020-12723]細工された正規表現が原因のバッファオーバーフロー

S_study_chunk()正規表現の中間言語表現を最適化するためにPerlの正規表現コンパイラが再帰的に呼び出すと、コンパイルされた正規表現の中間言語状態が破損する可能性があります。

発見者:セルゲイアレイニコフ

追記

Perlで記述されたアプリケーションは、攻撃者から提供された正規表現を評価する場合にのみ、上記の脆弱性のいずれかに対して脆弱になります。この方法で正規表現を評価することは危険であることが知られています。これは、正規表現エンジンがこの使用シナリオのサービス拒否攻撃から保護されていないためです。

互換性のない変更

Unicodeプロパティ値のワイルドカードサブパターンのコンパイルで、特定のパターンマッチング機能が禁止されました

これらのいくつかの機能は不適切であるか、このタスクを実行するために使用されるアルゴリズムを妨害します。完全なリストはperlunicodeの「プロパティ値のワイルドカード」にあります。

未使用の関数でPOSIX::mbstowcsありPOSIX::wcstombs、削除されます

これらの機能は、インターフェースの仕様に欠陥があるため機能しなかった可能性があります。それらの機能が利用可能であると主張されて何年もの間誰も不満を言っていないので、それらに対する要求は明らかにありません、それゆえそれらのためのいわゆる「サポート」は今や削除されます。

のバグ修正(?[...])により、一部のパターンがコンパイルできなくなった可能性があります

「選択したバグ修正」を参照してください。以前に使用されたヒューリスティックは、いくつかの構成要素を(おそらくプログラマーの意図した効果ではなく)コンパイルさせ、エラーになるはずでした。既知のものはありませんが、一部の誤った構成体がコンパイルできなくなっている可能性があります。

\p{user-defined} プロパティは常に公式のUnicodeのものをオーバーライドするようになりました

以前は、ユーザー定義プロパティが含まれる正規表現パターンのコンパイル前にユーザー定義プロパティが宣言された場合に限り、その定義が同じ名前の公式のUnicodeプロパティの代わりに使用されていました。現在は、常に公式プロパティをオーバーライドしています。この変更により、以前の動作に(おそらく無意識のうちに)依存していた既存のコードが破損する可能性があります。この修正がないと、Unicodeが、たまたま使用していたものと同じ名前の新しいプロパティを持つ新しいバージョンをリリースした場合、その新しいUnicodeバージョンを使用するperlにアップグレードすると、プログラムが壊れます。perlunicodeの「User-Defined Character Properties」を参照してください。[ GH#17205 ]

変更可能な変数は定数では許可されなくなりました

次のようなコード:

my $var;
$sub = sub () { $var };

where $varは、ある種の変更可能なコンテキストのどこかで参照され、サブルーチンが定義されている場合に例外が発生します。

このエラーは、サブ定義に戻りを追加することで回避できます。

$sub = sub () { return $var };

これはPerl 5.22から廃止されました。[ perl#134138 ]

vecコードポイントが0xFFを超える文字列での使用は禁止されています

このような文字列は内部的にUTF-8で表されvec、ビット指向の操作であり、これらの文字列に予期しない結果をもたらす可能性があります。これはperl 5.28.0で廃止されました。

文字列ビット単位演算子での0xFFを超えるコードポイントの使用

これらのいくつかの使用は、以前の非推奨サイクルの後、すでに違法でした。残りの使用は、perl 5.28.0で廃止されたため、現在禁止されています。perldeprecationを参照してください。

Sys::Hostname::hostname() 引数を受け入れません

この使用法はperl 5.28.0で廃止され、現在は致命的です。

プレーンな「0」文字列が範囲演算子の数値として扱われるようになりました

以前は、範囲"0" .. "-1"は「0」から「99」までの数値文字列の範囲を生成しました。これにより、空のリストが生成され0 .. -1ます。これ"0" .. "9"は、以前は文字列のリストを生成していた整数のリストを生成することも意味します。

これは、「0」で始まる文字列を文字列として扱い、"00" .. "03"生成された範囲のよう"00", "01", "02", "03"に扱われたが、文字列を特別に処理しなかった特殊なケースが原因でした"0"。[ perl#133695 ]

\K 現在、先読みと後読みのアサーションでは許可されていません

これは予期しない動作を引き起こし、望ましい動作を定義することができなかったため、許可されませんでした。[ perl#124256 ]

パフォーマンスの向上

  • my_strnlen独自のstrnlen実装を持たないシステム向けに高速化されています。

  • grok_bin_oct_hex(そのため、grok_bingrok_oct、及びgrok_hex)高速化されています。

  • grok_number_flags スピードアップしました。

  • sortsort {$a <=> $b}またはのような場合に顕著に高速になりましたsort {$b <=> $a}。[ GH#17608 ]

モジュールとプラグマ

更新されたモジュールとプラグマ

  • Archive :: Tarがバージョン2.32から2.36にアップグレードされました。

  • autodieがバージョン2.29から2.32にアップグレードされました。

  • Bがバージョン1.76から1.80にアップグレードされました。

  • B :: Deparseがバージョン1.49から1.54にアップグレードされました。

  • ベンチマークがバージョン1.22から1.23にアップグレードされました。

  • charnamesがバージョン1.45から1.48にアップグレードされました。

  • Class :: Structがバージョン0.65から0.66にアップグレードされました。

  • Compress :: Raw :: Bzip2がバージョン2.084から2.093にアップグレードされました。

  • Compress :: Raw :: Zlibがバージョン2.084から2.093にアップグレードされました。

  • CPANがバージョン2.22から2.27にアップグレードされました。

  • DB_Fileがバージョン1.843から1.853にアップグレードされました。

  • Devel :: PPPortがバージョン3.52から3.57にアップグレードされました。

    Win32で生成されたテストファイルは、POSIXのようなシステムで生成されたときと同じになりました。

  • 診断がバージョン1.36から1.37にアップグレードされました。

  • Digest :: MD5がバージョン2.55から2.55_01にアップグレードされました。

  • Dumpvalueがバージョン1.18から1.21にアップグレードされました。

    以前は、配列の要素をダンプして未定義の値を検出すると、出力される文字列はempty arrayでした。これは、本来意図されていたものに変更されましたempty slot

  • DynaLoaderがバージョン1.45から1.47にアップグレードされました。

  • Encodeがバージョン3.01から3.06にアップグレードされました。

  • エンコーディングがバージョン2.22から3.00にアップグレードされました。

  • 英語がバージョン1.10から1.11にアップグレードされました。

  • エクスポーターがバージョン5.73から5.74にアップグレードされました。

  • ExtUtils :: CBuilderがバージョン0.280231から0.280234にアップグレードされました。

  • ExtUtils :: MakeMakerがバージョン7.34から7.44にアップグレードされました。

  • 機能がバージョン1.54から1.58にアップグレードされました。

    新しいindirect機能が追加されました。これはデフォルトで有効になっていますが、間接オブジェクト構文をオフにすることができます

  • File :: Findがバージョン1.36から1.37にアップグレードされました。

    Win32では、テストでドライブのルートディレクトリ内のファイルも書き込み可能なルートディレクトリも必要ありません。

  • File :: Globがバージョン1.32から1.33にアップグレードされました。

  • File :: statがバージョン1.08から1.09にアップグレードされました。

  • Filter :: Simpleがバージョン0.95から0.96にアップグレードされました。

  • Getopt :: Longがバージョン2.5から2.51にアップグレードされました。

  • Hash :: Utilがバージョン0.22から0.23にアップグレードされました。

    サンプルコードが新しいperlで機能しなくなったため、概要が更新されました。[ GH#17399 ]

  • I18N :: Langinfoがバージョン0.18から0.19にアップグレードされました。

  • I18N :: LangTagsがバージョン0.43から0.44にアップグレードされました。

    IGNORE_WIN32_LOCALE環境変数を文書化します。

  • IOがバージョン1.40から1.43にアップグレードされました。

    IO :: Socketは、実装がプロトコルを選択することを示すため、ゼロのプロトコル値をキャッシュしなくなりました。つまりSO_PROTOCOL、特定のソケットタイプを実装していないプラットフォームでは、プロトコルメソッドがを返すことがありundefます。

    提供されたTOは、send()メソッドの呼び出しで常に優先されるようになりました。[ perl#133936 ]

  • IO-Compressがバージョン2.084から2.093にアップグレードされました。

  • IPC :: Cmdがバージョン1.02から1.04にアップグレードされました。

  • IPC :: Open3がバージョン1.20から1.21にアップグレードされました。

  • JSON :: PPがバージョン4.02から4.04にアップグレードされました。

  • Math :: BigIntがバージョン1.999816から1.999818にアップグレードされました。

  • Math :: BigInt :: FastCalcがバージョン0.5008から0.5009にアップグレードされました。

  • Module :: CoreListがバージョン5.20190522から5.20200620にアップグレードされました。

  • Module :: Load :: Conditionalがバージョン0.68から0.70にアップグレードされました。

  • Module :: Metadataがバージョン1.000036から1.000037にアップグレードされました。

  • mroがバージョン1.22から1.23にアップグレードされました。

  • Net :: Pingがバージョン2.71から2.72にアップグレードされました。

  • Opcodeがバージョン1.43から1.47にアップグレードされました。

  • openがバージョン1.11から1.12にアップグレードされました。

  • オーバーロードがバージョン1.30から1.31にアップグレードされました。

  • がバージョン0.237から0.238にアップグレードされました。

  • perlfaqがバージョン5.20190126から5.20200523にアップグレードされました。

  • PerlIOがバージョン1.10から1.11にアップグレードされました。

  • PerlIO :: encodingがバージョン0.27から0.28にアップグレードされました。

  • PerlIO :: viaがバージョン0.17から0.18にアップグレードされました。

  • Pod :: Htmlがバージョン1.24から1.25にアップグレードされました。

  • Pod :: Simpleがバージョン3.35から3.40にアップグレードされました。

  • podlatorsがバージョン4.11から4.14にアップグレードされました。

  • POSIXがバージョン1.88から1.94にアップグレードされました。

  • reがバージョン0.37から0.40にアップグレードされました。

  • Safeがバージョン2.40から2.41にアップグレードされました。

  • Scalar :: Utilがバージョン1.50から1.55にアップグレードされました。

  • SelfLoaderがバージョン1.25から1.26にアップグレードされました。

  • ソケットがバージョン2.027から2.029にアップグレードされました。

  • Storableがバージョン3.15から3.21にアップグレードされました。

    note()from Test :: Moreの使用は、テストではオプションになりました。これは、CPANから非常に古いperlにインストールするときに、Test :: Moreの循環依存関係を回避します。

    2GBを超えるvstringマジックストリングは許可されなくなりました。

    正規表現オブジェクトは、取得時にオブジェクトIDの目的で適切にカウントされませんでした。これにより、結果の構造が破損するか、場合によってはランタイムエラーが発生します。[ perl#134179 ]

  • Sys :: Hostnameがバージョン1.22から1.23にアップグレードされました。

  • Sys :: Syslogがバージョン0.35から0.36にアップグレードされました。

  • Term :: ANSIColorがバージョン4.06から5.01にアップグレードされました。

  • Test :: Simpleがバージョン1.302162から1.302175にアップグレードされました。

  • スレッドがバージョン3.04から3.05にアップグレードされました。

  • Thread :: Queueがバージョン3.13から3.14にアップグレードされました。

  • スレッドがバージョン2.22から2.25にアップグレードされました。

  • threads :: sharedがバージョン1.60から1.61にアップグレードされました。

  • Tie :: Fileがバージョン1.02から1.06にアップグレードされました。

  • Tie :: Hash :: NamedCaptureがバージョン0.10から0.13にアップグレードされました。

  • Tie :: Scalarがバージョン1.04から1.05にアップグレードされました。

  • Tie :: StdHandleがバージョン4.5から4.6にアップグレードされました。

  • Time :: HiResがバージョン1.9760から1.9764にアップグレードされました。

    5.6より前のperlやクラシックMacOSのサポートなど、廃止されたコードを削除しました。[ perl#134288 ]

  • Time :: Pieceがバージョン1.33から1.3401にアップグレードされました。

  • Unicode :: Normalizeがバージョン1.26から1.27にアップグレードされました。

  • Unicode :: UCDがバージョン0.72から0.75にアップグレードされました。

  • VMS :: Stdioがバージョン2.44から2.45にアップグレードされました。

  • 警告がバージョン1.44から1.47にアップグレードされました。

  • Win32がバージョン0.52から0.53にアップグレードされました。

  • Win32API :: Fileがバージョン0.1203から0.1203_01にアップグレードされました。

  • XS :: APItestがバージョン1.00から1.09にアップグレードされました。

削除されたモジュールとプラグマ

  • Pod :: Parserはコアディストリビューションから削除されました。引き続きCPANからダウンロードできます。これは[ perl#119439 ]を解決します。

ドキュメンテーション

既存のドキュメントへの変更

このドキュメントに記載されている変更を反映するようにドキュメントを更新しようとしました。私たちが見逃したものを見つけた場合は、https://github.com/Perl/perl5/issuesで問題を開いてください

さらに、以下の選択された変更が行われました。

perldebguts

  • いくつかのregnode定義を単純化する

    更新BOUNDNBOUND定義。

  • ANYOFHのregnodeを追加

    このノードはに似ていますがANYOFHb、一致するすべてのコードポイントで複数の先行バイトが同じ場合に使用されます。

    ANYOFHb一致しないものに対してUTF-8からコードポイントに変換する必要を回避するために使用されます。UTF-8でエンコードされたターゲットの最初のバイトが目的のバイトであることを確認し、可能なコードポイントのほとんどを除外します。

ペルラピ

  • sv_2pvbyte SVをダウングレードできない場合、それが鳴るように更新されました。

  • sv_setpvn UTF-8フラグはこの関数によって変更されず、NULバイトの終了が保証されることを記載するように更新されました。

  • のドキュメントPL_phaseが追加されました。

  • ドキュメントgrok_bingrok_octおよびgrok_hex更新され、明らかにされています。

perldiag

  • 実験的な「isa」演算子のドキュメントを追加

    (S experimental :: isa)この警告は、(isa)演算子を使用すると発生します。この演算子は現在実験段階であり、その動作はPerlの将来のリリースで変更される可能性があります。

perlfunc

caller

__FILE__andと同様に__LINE__、ここで返されるファイル名と行番号は、perlsynの「Plain Old Comments(Not!)」で説明されているメカニズムによって変更される可能性があります。

__FILE__

これはperlsynの「Plain Old Comments(Not!)」で説明されているメカニズムによって変更できます。

__LINE__

これはperlsynの「Plain Old Comments(Not!)」で説明されているメカニズムによって変更できます。

return

現在、あなたはから戻ることができないと述べていますdo BLOCK

open

open()セクションでは、大幅に改装されていました。

perlguts

  • perlの使用を提案しなくなりましたmallocmalloc現在のシステムは、perlの実装よりもはるかに優れていると考えられています。

  • embed.fncフラグに関するドキュメントは削除されました。embed.fncに十分なコメントが追加されました。そのファイルを変更する人は、最初にそれらのコメントを見るので、ここのエントリは冗長になります。

  • の更新されたドキュメント UTF8f

  • 行方不明の=for apidoc行を追加しました

perlhacktips

  • Perl文字列とC文字列の違いが詳細になりました。

パーリントロ

  • 繰り返し演算子のドキュメントxが明確になりました。[ GH#17335 ]

perlipc

  • open使用法を取り巻くドキュメントは、裸語ではなく3引数のオープン変数とレキシカル変数を優先するように最新化されています。

  • 厳格なセーフすべての例を作り、交換するなど、様々なアップデートや修正-wuse warnings

perlop

  • 「isa」演算子は実験的です

    これは試験的な機能であり、で有効にしuse feature 'isa'た場合に使用できます。experimental::isaカテゴリで警告を発します。

perlpod

  • ここでは、perlインタープリター内のさまざまなスタックの詳細について説明します。

  • の使用に関するアドバイスが追加されましたZ<>

perlport

  • 70の代わりにtimegm正しい年の形式1970を使用するように例を更新します。[ GH#16431 ] 

perlreref

  • いくつかのタイプミスを修正します。

perlvar

  • 文字列$]化して数値で比較することをお勧めします。

perlapiperlintern

  • 以前は不足していたいくつかの機能のドキュメントが追加されました。

perlxs

  • libffi単純なライブラリバインディングの使用を提案します。

POSIX

  • setlocale スレッド化されたビルドに関する警告は、Perl 5.28.X以降には適用されないことに注意して更新されました。

  • Posix::SigSet->new(...) 提供された信号のいずれかをセットに追加できない場合、エラーをスローすることを示すように更新されました。

さらに、以下の選択された変更が行われました。

  • 廃止されたhttps://search.cpan.orgサイトへのリンクは、同等のhttps://metacpan.org URLをポイントするようになりました。[ GH#17393 ]

  • ExtUtils :: XSSymSetのmanページが、モジュールがインストールされている唯一のプラットフォームであるVMSにのみインストールされるようになりました。[ GH#17424 ]

  • URLがに変更されhttps://、古いリンクが更新されました。

    該当する場合、ドキュメント内のURLは、http://プロトコルの使用からに移動されましたhttps://。これは、https://rt.perl.orgのバグトラッカーの場所にも影響します

  • OS / 2ライブラリ、Address Sanitizer、その他のシステムツールへのリンクの一部が古くなっています。これらは作業リンクで更新されています。

  • perl5-portersの古いメールアドレスへのリンクのいくつかは古くなっています。これらは作業リンクで更新されています。

診断

警告や致命的なエラーメッセージなど、診断出力に次の追加または変更が加えられました。診断メッセージの完全なリストについては、perldiagを参照してください。

新しい診断

新しいエラー

新しい警告

既存の診断の変更

ユーティリティの変更

パーバグ

  • バグトラッカーのホームページURLがGitHubを指すようになりました。

streamzip

  • これは、IO :: Compress :: Baseアップグレードの一部として含まれている新しいユーティリティです。

    streamzipは、stdinからzipファイルを作成します。プログラムはstdinからデータを読み取り、それをzipコンテナーに圧縮し、デフォルトでは、ストリームされたzipファイルをstdoutに書き込みます。

構成とコンパイル

構成、設定

  • 打ち鳴らすために++、追加#include <stdlib.h>のための構成のプローブにfutimesstrtollstrtoulstrtoullstrtouq、それ以外のプローブは、コンパイルに失敗するだろう。

  • lchownより確実に検出するはずのclang ++を満たすために、コンパイルおよび実行テストを使用します。

  • C ++コンパイラの場合、printfおよびC ++コンパイラを使用する#include <stdio.h>ためgetpgrp、Configureのプローブに追加するとsetpgrp、警告だけでなくコンパイルが失敗する場合があります。

  • コンパイラーがインライン属性を処理できるかどうかを確認してください。

  • 文字データの配置を確認します。

  • Configureがgcc-10を正しく処理するようになりました。以前は、それをgcc-1として解釈してオンにしていました-fpcc-struct-return

  • Perlはをプローブしなくなりd_u32align、デフォルトdefineですべてのプラットフォームに適用されます。このチェックは、32ビットプラットフォームでのみ行われたときにエラーが発生しやすくなりました。[ perl#133495 ]

  • Z / OS(ネイティブEBCDIC)でperlをビルドするためのドキュメントとヒントが更新されました。これはまだ進行中の作業です。

  • の新しいプローブmalloc_usable_sizeが追加されました。

  • C ++およびclang ++での検出に対する構成の改善。Andy Doughertyによる進行中の作業。[ perl#134171 ]

  • autodoc.pl

    perlinternperlapiを再生成するこのツールは大幅に見直され、embed.fncDevel :: PPPortで使用されるフラグの一貫性が復元され=for apidoc、コード内の多くの冗長なエントリを削除できるようになりました。

  • これでECHOマクロが定義されました。これは、dtraceもともとFreeBSD用に変更されたルールで使用されており、FreeBSD makeは、それを明らかに事前定義しています。Solaris makeはECHO、Solarisでこのルールに違反したものを事前定義していません。[ perl#134218 ]

  • Bisonバージョン3.1から3.4がサポートされるようになりました。

テスト中

このリリースでの他の追加および変更を反映するように、テストが追加および変更されました。さらに、次の重要な変更が行われました。

  • t / run / switches.tは、t /の下のtmpinplace /ディレクトリーを使用(および再利用)しなくなりました。これにより、誤った障害を防止できます。[ GH#17424 ] 

  • のさまざまなバグPOSIX::mbtowcが修正されました。他のスレッドとの潜在的な競合は現在回避されており、以前はワイド文字が返されたためにガベージでした。

  • のさまざまなバグPOSIX::wctombが修正されました。他のスレッドとの潜在的な競合が回避され、以前は文字列パラメーターが共有されているか、結果を保持するのに十分な長さの文字列で事前に割り当てられていなかった場合にsegfaultが発生しました。

  • 制御文字とUnicodeを含むスカラーの特定のテスト出力がEBCDICで修正されました。

  • t / charset_tools.pl:ASCIIプラットフォームでの作業を回避します。

  • t / re / regexp.t:ASCIIプラットフォームでの多くの正規表現テストを高速化

  • t / re / pat.t:EBCDICで機能しないテストをスキップします。

プラットフォームサポート

廃止されたプラットフォーム

Windows CE

Windows CEでのperlのビルドのサポートが削除されました。

プラットフォーム固有の注意事項

Linux

cc移入するために使用されるplibpth場合ccですclang。[ perl#134189 ]

NetBSD 8.0

g ++を使用したNetBSD 8.0でのPerlのコンパイルを修正。[ GH#17381 ]

ウィンドウズ
  • との構成はccflagsoptimizePOSIXプラットフォームと同様に分離されました。[ GH#17156 ]

  • Visual C ++ 6.0でperlをビルドするためのサポートが削除されました。

  • Windowsのバグが原因でWin32でロケールテストがクラッシュする可能性があります。また、現在のコードページでロケール名が有効にエンコードされていない場合にCRTが例外をスローすることで、クラッシュする可能性があります。

    もう1つは、ロケール名を自分でデコードし、常にUTF-8としてデコードすることです。[ perl#133981 ]

  • 始まる環境変数がFOO既に存在する場合、t / op / magic.tは失敗する可能性があります。

  • MYMALLOC(PERL_MALLOC)ビルドが修正されました。

Solaris
  • ConfigureにあるOracle Developer Studioコンパイラの最新バージョンが見つかり/opt/developerstudio*ます。

  • Configureは検出された型をgethostby*関数に使用し、PerlがSolarisの特定の構成で再度コンパイルできるようになりました。

VMS
  • パッチキットC99 V2.0のリリースにより、VSIはこれまで欠落していた多くのC99機能をサポートしています。インストールそのパッチキットとシステムでは、Perlの構成プロセスは現在のヘッダの存在検出するstdint.hと、次の機能を:fpclassifyisblankislessllrintllrintlllroundllroundlnearbyintroundscalbn、およびscalbnl

  • -Duse64bitint VMSのデフォルトになりました。

z / OS

Perl 5.32はz / OS 2.4でテストされていますが、次の警告があります。

  • 静的ビルド(デフォルト)のみが確実にビルドされます

  • ロケールを使用する場合、z / OSはLC_MESSAGESカテゴリーを適切に処理しないため、perlをコンパイルするときに、構成オプションに以下を追加する必要があります

    ./Configure <other options> -Accflags=-DNO_LOCALE_MESSAGES
  • z / OSはスレッドのあるロケールをサポートしていないため、スレッド化されたperlをコンパイルするときは、構成オプションに以下を追加する必要があります

    ./Configure <other Configure options> -Accflags=-DNO_LOCALE
  • Perlに同梱されている一部のCPANモジュールは、少なくとも1つのセルフテストに失敗します。これらは:Archive :: Tar、Config :: Perl :: V、CPAN :: Meta、CPAN :: Meta :: YAML、Digest :: MD5、Digest :: SHA、Encode、ExtUtils :: MakeMaker、ExtUtils :: Manifest 、HTTP :: Tiny、IO :: Compress、IPC :: Cmd、JSON :: PP、libnet、MIME :: Base64、Module :: Metadata、PerlIO :: via-QuotedPrint、Pod :: Checker、podlators、Pod :: Simple、Socket、およびTest :: Harness。

    障害の原因は、セルフテスト自体に欠陥があり、モジュールは実際には問題なく機能しますが、EBCDICプラットフォームではモジュールがまったく機能しません。

内部変更

  • savepvn31ビットより長い文字列を処理できるため、のlenパラメータはのSize_t代わりにI32なりました。

  • (レクサーPerl_yylex()toke.cが)、以前シングル4100行の関数であったに大きく依存gotoし、広くスコープのローカル変数の多くはその仕事をします。現在は、数十個の小さな静的関数に分離されています。残りの最大のチャンク(yyl_word_or_keyword())は900行強で、単一のswitchステートメントで構成され、そのcaseグループはすべて独立しています。これは、理解と保守がはるかに簡単になるはずです。

  • perlコアで使用されるOSレベルのシグナルハンドラーとタイプ(Sighandler_t)は3つのパラメーターを持つものとして宣言されましたが、OSは常に1つの引数でそれらを呼び出すように指示されました。これは、1つのパラメータを持つように宣言することで修正されました。詳細については、マージコミットv5.31.5-346-g116e19abbfを参照してください。

  • 処理するコードtr///が大幅に修正され、特にソースや置換文字列にコードポイントが255を超える文字が含まれている場合に、さまざまなバグが修正されました。一部のバグは文書化されていませんでした。/s、圧搾は交換ではなく、ソースに基づいて行われました。修正された文書化されたバグは[ perl#125493 ]でした。

  • UTF-8でエンコードされたUnicode文字列を扱うXSの作家のための新しいマクロが作成されているUTF8_CHK_SKIP」はperlapiでより不正なUTF-8入力の顔でより安全であることUTF8_SKIP」はperlapiで(はなく、安全なほどUTF8_SAFE_SKIPはperlapiで」) 。NUL文字を超えては読みません。Devel :: PPPort 3.55以降でバックポートされています。

  • PL_curstackinfo->si_cxsubixフィールドが追加されました。これは、最後にプッシュされたサブ/フォーマット/評価コンテキストのスタックインデックスを記録します。これは、設定と自動的によって復元されcx_pushsub()cx_popsub()などがありますが、コンテキストスタックの異常な操作を行う場合は、手動で管理する必要があります。

  • 文字タイプの分類を処理するさまざまなマクロ、および入力がUTF-8でエンコードされる大文字と小文字の変更は、バッファーの終わりを超えた潜在的な読み取りを防ぐために、追加のパラメーターを必要とします。これらを使用すると、Perl 5.26以降、非推奨の警告が生成されます。詳細は「XSコードでのUTF-8を扱うさまざまなマクロの使用」にあります。perldeprecation

  • 新しいパーサー関数parse_subsignature()を使用すると、キーワードプラグインuse feature 'signatures'が有効なときにサブルーチンシグネチャを解析できます。これにより、カスタムキーワードsubで、署名を含む通常の宣言と同様のセマンティクスを実装できます。[ perl#132474 ]

  • 一部のプラットフォームでは、ロケールを一時的に切り替えるときにミューテックスを保持する必要があるため、[ perl#134172 ]の一部として、これを安全かつ効率的に行うのを容易にする新しいマクロ(STORE_LC_NUMERIC_SET_TO_NEEDED_INWITH_LC_NUMERIC_SET_TO_NEEDEDおよびWITH_LC_NUMERIC_SET_TO_NEEDED_IN)が追加されました。 

  • OP構造を割り当てるためのメモリブックキーピングオーバーヘッドは、64ビットシステムのOPごとに8バイト削減されました。

  • eval_pv()croak_on_errorは、trueのときに例外を文字列化しなくなりました。[ perl#134175 ]

  • PERL_DESTRUCT_LEVEL環境変数は、以前はDEBUGGINGサポートでビルドされたperlバイナリでのみ使用されていました。すべてのperlビルドでチェックされるようになりました。その通常の使用法は、perlが終了する前に割り当てたすべてのメモリブロックを個別に強制的に解放することです。これは、valgrindなどの自動リーク検出ツールを使用するときに役立ちます。

  • API eval_sv()がG_RETHROWフラグを受け入れるようになりました。このフラグが設定されていて、提供されたコードのコンパイルまたは実行中に例外がスローされた場合、それは再スローされ、eval_sv()は戻りません。[ perl#134177 ]

  • perl#2754 ] の修正の一部として、exit(0)がBEGINUNITCHECKまたはCHECKブロックで呼び出された場合、perl_parse()はゼロ以外を返すようになりました。

  • コンパイル中にopツリーを再帰的にたどったほとんどの関数は、非再帰的になりました。これにより、$n == 1 ? "one" : $n == 2 ? "two" : ....(特に自動生成されるコードなど)など、opツリーが深くネストされている場合に、SEGVがスタックオーバーフローするのを回避できます。

    スレッドはデフォルトで小さなスタックを持つ傾向があるため、コードが別のスレッド内でコンパイルされる場合、これは特に顕著です。

選択されたバグ修正

  • 以前はperlfuncの「require」は、特殊な組み込みSV &PL_sv_undefを値が%INC前のrequireエラーと同じように扱い、他の未定義のSVは前のエラーrequireが成功したかのように扱います。これは予想外の成功を引き起こす可能性があるrequire上、例えばlocal %INC = %INC;。これは修正されました。[ GH#17428 ]

  • (?{...})正規表現のevalグループが「位置変更なしのEVALが正規表現の制限を超えた」[ GH#17490 ]を誤ってトリガーすることがなくなりました。

  • (?[...])括弧で囲まれた拡張文字クラスは、以前にコンパイルされたそのようなクラスが別のクラスに補間される場合に、誤ってエラーを発生させません。以前に使用されたヒューリスティックは信頼できる方法に置き換えられたため、生成される診断は変更されました。「診断」を参照してください。

  • デバッグディスプレイ(指定して言う-Drか、use reコンパイルされたUnicodeプロパティワイルドカードサブパターンのは、適切なオプションで()はもはや不要な出力を持っていません。

  • 正規表現エンジンのアサーションエラーを修正します。[ GH#17372 ]

  • 後のpp_hot.cのコアダンプを修正しますB::UNOP_AUX::aux_list()。[ GH#17301 ]

  • ロードIOはスレッドセーフになりました。[ GH#14816 ]

  • \p{user-defined}公式のUnicodeを上書きする[ GH#17025 ]

    このパッチの前は、オーバーライドが有効な場合があっただけです。

  • 塗りつぶされた/ilregnodeとmulti-char foldsを適切に処理します

  • make minitest中のコンパイルエラー[ GH#17293 ]

  • 実装を移動し%-%+コアに。

  • grok_inf_nanGH#17370 ]のバッファーを超えて読み取る

  • LC_MESSAGESGH#17081 ]でのglibcバグの回避策

  • printf()またはsprintf()、この%n形式を使用すると、デバッグビルドでパニックが発生したり、SVfUTF8フラグ付き文字列を生成するときに誤ってキャッシュされた長さの値が報告されたりする可能性があります。[ GH#17221 ]

  • トークナイザーは大幅にリファクタリングされました。[ GH#17241 ] [ GH#17189 ]

  • use strict "subs"multiconcat演算子に最適化されたベアワード定数に適用されます。[ GH#17254 ]

  • 正規表現パターンのメモリリークが修正されました。[ GH#17218 ]

  • Perlは、文字列を数値に変換するときに、「0x」または「0b」で始まる文字列をそれぞれ16進数または2進数として扱いません。これは、文字列を浮動小数点数に変換するときの精度を向上させることを目的としたperl 5.30.0で誤って導入された動作の変更を元に戻します。[ perl#134230 ]

  • SVf_UTF8文字列をUnicodeリテラルを含む正規表現と照合すると、照合のたびにSVがリークする可能性があります。[ perl#134390 ]

  • 進とバイナリ浮動小数点リテラルのオーバーロードは、常に文字列で渡された0x代わりに、適切なの接頭辞00b接頭辞を。[ perl#125557 ]

  • $@ = 100; die;100を無視するのではなく、例外として正しく伝播するようになりました。[ perl#134291 ]

  • 0 0x@S_no_op()でアサートされなくなりました。[ perl#134310 ]

  • $@読み取り専用のときに例外がスローされると、perlがupdateを試行したときに無限再帰が$@発生し、別の例外がスローされて、スタックオーバーフローが発生する可能性があります。Perl $@は、単純な書き込み可能なSVではない場合、コピーに置き換えられます。[ perl#134266 ]

  • 設定は、$)あなたが必要な権限を持っている場合は、適切に補助グループIDを設定します。[ perl#134169 ]

  • パイプのclose()は、IO SVからPerlIOオブジェクトを先制的にクリアするようになりました。これにより、close()が子プロセスの完了を待機している間にシグナルハンドラーがdie()またはexit()を呼び出した場合に、すでに閉じられているPerlIOオブジェクトを再度閉じる試みが行われなくなります。[ perl#122112 ]

  • sprintf("%.*a", -10000, $x)負の精度値の誤った処理により、バッファオーバーフローが発生します。[ perl#134008 ]

  • 参照でscalar()を使用すると、コンパイル中に誤ったアサーションエラーが発生する可能性があります。[ perl#134045 ]

  • %{^CAPTURE_ALL}%-、誤ってのエイリアスではなく、文書化されたとおりのへのエイリアスになりました%+。[ perl#131867 ]

  • %{^CAPTURE}@{^CAPTURE}最初に言及された場合は機能しませんでした。%{^CAPTURE_ALL}@{^CAPTURE_ALL}についても同様ですが、@{^CAPTURE_ALL}現在は使用されていません。[ perl#134193 ]

  • 非常に大きい(2GBを超える)浮動小数点形式の幅により、基になるsnprintf()の呼び出しで整数オーバーフローが発生し、アサーションが発生する可能性があります。フォーマットされた浮動小数点の幅は、snprintf()の戻り値であるintの範囲に制限されます。[ perl#133913 ]

  • サブ解析("${code here}"またはなどs/.../code here/e)内の次の構成の解析は、通常の解析方法と一致するように変更されました。

    • print $fh ... 構文エラーは発生しなくなりました。

    • s/.../ ${time} /e現在のようなコードは、警告が有効になっているときに「$ {time}のあいまいな使用が$ time at ...に解決されました」という警告を適切に生成します。

    • @x {"a"} (スペース付き)サブパースで、警告が有効になっている場合に「次のように書かれた」警告が適切に生成されるようになりました。

    • 属性をサブパースで使用できるようになりました。[ perl#133850 ]

  • 不完全ヘクスバイナリリテラルなど0x0b今かのように扱われているxか、b次のトークンの一部です。[ perl#134125 ]

  • スプリアス)におけるような、subparseにs/.../code here/eまたは"...${code here}"、もはやパーサが混乱しません。

    以前は、サブパースが生成さ(れた)トークンで囲まれていました。そのため)、通常のサブパースのクリーンアップを行わずに偽造によって構成が閉じられ、パーサーが混乱し、アサーションエラーが発生する可能性がありました。

    このような構成要素は、ソースに含めることができない人工的なトークンで囲まれています。[ perl#130585 ]

  • などのサブルーチンの参照割り当ては\&foo = \&bar;main::パッケージ内で何も通知せずに何もしませんでした。[ perl#134072 ]

  • sv_gets()は、ターゲットSVがシグナルハンドラーによって変更された場合、より適切に回復するようになりました。[ perl#134035 ]

  • readline @foo@fooスカラーコンテキストで評価するようになりました。以前はリストコンテキストで評価され、readline()はスタックから1つの引数のみをポップするため、スタックがアンダーフローしたり、スタックに予期しない値が残ったりすることがありました。[ perl#133989 ]

  • 不完全な16進数またはバイナリリテラルの解析は5.31.1で変更され、そのようなリテラルを0として扱うようになりました。これにより、次のトークンが残されるxb、次のトークンの一部として解析されます。これにより、動作が静かに変化する可能性があるため、不完全な16進数またはバイナリリテラルが致命的なエラーを生成するようになりました。[ perl#134125 ]

  • eval_pv()のcroak_on_errorフラグは、例外が偽のオーバーロード値であってもスローするようになりました。[ perl#134177 ]

  • INIT終了(0)内で呼び出された場合、ブロックとプログラム自体はもはや実行されていないBEGINUNITCHECKまたはCHECKブロック。[ perl#2754 ]

  • open my $fh, ">>+", undef一時ファイルを追加モードで開くようになりました:書き込みは書き込みの前にファイルの終わりまでシークします。[ perl#134221 ]

  • OP_MULTIDEREFがサブツリーに含まれているopで初期化されていない値の警告のソースを検索するときのSEGVを修正しました。[ perl#134275 ]

死亡記事

PerlとRakuコミュニティの不可欠な部分であり、私たちすべての親愛なる友人であるJeff Goff(JGOFFまたはDrForr)は、2020年3月13日に他界しました。 、数多くのプロジェクトに貢献し、彼ができる方法で支援します。

彼の死は私たちの心と私たちのコミュニティに穴を残し、彼はひどく寂しくなるでしょう。

謝辞

Perl 5.32.0は、Perl 5.30.0以降の開発の約13か月を表し、89人の作成者からの1,800個のファイルに約220,000行の変更が含まれています。

自動生成されたファイル、ドキュメント、リリースツールを除いて、880 .pm、.t、.c、および.hファイルに約140,000行の変更がありました。

Perlは、活気に満ちたユーザーと開発者のコ​​ミュニティのおかげで、40年間繁栄し続けています。以下の人々は、Perl 5.32.0になった改良に貢献したことが知られています:

アーロン・クレイン、アルベルト・シムエス、アレクサンダー・サッカ、アンドレアス・ケーニッヒ、アンドリュー・フレッシュ、アンディ・ドハティ、アスク・ビョルン・ハンセン、アスガラ・アスガシ、ベルンハルト・M・ヴィーデマン、ブライアン・ステンソン、チャド・グラナム、チェイス・ホワイトナー、クリス・ビンゴス・ウィリアムズ、クレイグA.ベリー、Dagfinn IlmariMannsåker、Dan Book、Daniel Dragan、Dan Kogai、Dave Cross、Dave Rolsky、David Cantrell、David Harcheraves、E。Choroba、Felipe Gasper、Florian Weimer、Graham Knop、HåkonHægland、Hauke D H.Merijn Brand、Hugo van der Sanden、Ichinose Shogo、James E Keenan、Jason McIntosh、Jerome Duval、Johan Vromans、John Lightsey、John Paul Adrian Glaubitz、Kang-min Liu、Karen Etheridge、Karl Williamson、Leon Timmermans、Manuel Mausz、Marc Green、Matthew Horsfall、Matt Turner、Max Maischein、Michael Haardt、Nicholas Clark、Nicolas R.、Niko Tyni、Pali、Paul Evans、Paul Johnson、ポールマルケス、ピーターアイゼントラウト、ピータージョンアクラム、ピーターオリバー、ペトルピサック、レニーベッカー、リカルドサイン、リチャードリーチ、ラスアルベリー、サミュエルスミス、サントゥオジャンペラ、ソーヤーX、セルゲイアレイニコフ、セルギーボロディッチ、白方ケンタロウ、シュロミフィッシュ、シロミフィッシュSlaven Rezic、Smylers、Stefan Seifert、Steve Hay、Steve Peters、Svyatoslav、Thibault Duponchelle、Todd Rinaldo、Tomasz Konojacki、Tom Hukins、Tony Cook、Unicode Consortium、VanL、Vickenty Fesunov、Vitali Peil、Yves Orton、Zefram。Tomasz Konojacki、Tom Hukins、Tony Cook、Unicode Consortium、VanL、Vickenty Fesunov、Vitali Peil、Yves Orton、Zefram。Tomasz Konojacki、Tom Hukins、Tony Cook、Unicode Consortium、VanL、Vickenty Fesunov、Vitali Peil、Yves Orton、Zefram。

上記のリストはバージョン管理履歴から自動的に生成されるため、ほぼ間違いなく不完全です。特に、Perlバグトラッカーに問題を報告した(非常に感謝されている)貢献者の名前は含まれていません。

このバージョンに含まれる変更の多くは、Perlのコアに含まれるCPANモジュールに由来しています。Perlの繁栄を支援してくれたCPANコミュニティ全体に感謝します。

Perlの歴史的貢献者すべてのより完全なリストについては、Perlソース配布のAUTHORSファイルを参照してください。

バグの報告

バグと思われるものが見つかった場合は、https://github.com/Perl/perl5/issuesにあるperlバグデータベースを確認してくださいhttp://www.perl.org/、Perlのホームページにも情報があるかもしれません。

報告されていないバグがあると思われる場合は、https://github.com/Perl/perl5/issuesで問題を開いてください。バグを小さく十分なテストケースにトリミングしてください。

報告しているバグがセキュリティに影響を及ぼし、パブリックイシュートラッカーに送信することが不適切である場合は、問題を報告する方法の詳細についてperlsecの「セキュリティ脆弱性の連絡先情報」を参照してください。

感謝を

Perl 5で行った作業についてPerl 5ポーターに感謝したい場合は、次のperlthanksプログラムを実行してください。

perlthanks

これにより、Perl 5ポーターリストに感謝の意を表すメールが送信されます。

こちらもご覧ください

変更点変更点の完全な詳細を表示する方法を説明するためのファイル。

Perlをビルドする方法のINSTALLファイル。

一般的なもののためのREADMEファイル。

著作権情報のArtisticおよびCopyingファイル。