NAME

perl5300delta - perl v5.30.0 での変更点

DESCRIPTION

この文書は 5.28.0 リリースと 5.30.0 リリースの変更点を記述しています。

5.26.0 のような以前のリリースから更新する場合は、まず 5.26.0 と 5.28.0 の違いについて記述している perl5280delta を読んでください。

注意

sv_utf8_(downgrade|decode) はもはや実験的ではなくなりました。 [perl #133788].

コアの拡張

正規表現パターンでの制限された変数長の後方参照に実験的に対応しました

((?<=foo?)(?<!ba{1,9}r) のような) 後方参照アサートを使うと、 以前はエラーが発生してコンパイルを拒否していました。 これは (最大後方参照が最大 255 文字なら) コンパイルはされますが、 新しい experimental::vlb 警告カテゴリの警告が発生するようになりました。 これは、正確な振る舞いは現場でのフィードバックを基にして変更される 予定であることを注意するものです。

"(?<=pattern)" in perlre and "(?<!pattern)" in perlre を参照してください。

"{m,n}" 形式の正規表現量指定子の "n" の上限が 65534 に倍増しました

上限指定なし量指定子 "{m,}" の意味は変わりません。 これはほとんどのプラットフォームで 2**31 - 1 回マッチングし、 C 言語の short 変数の長さが 4 バイトより長いプラットフォームではもっと 多くなります。

Unicode 12.1 に対応しました

Unicode のリリースサイクルの変更により、Perl は Perl 5.28 の Unicode 10.0 から Perl 5.30 の Unicode 12.1 にジャンプします。

Unicode の変更に関する詳細については、 11.0 は https://www.unicode.org/versions/Unicode11.0.0/ を、 12.0 は https://www.unicode.org/versions/Unicode12.0.0/ を、 12.1 は https://www.unicode.org/versions/Unicode12.1.0/ を 参照してください。 (Unicode 12.1 の 12.0 との違いは、新しい日本の元号を表す一つの文字が 追加されただけです。)

Word_Break 特性は、過去の Perl リリースと同様、Perl ユーザーの 推測とより一致するように振る舞いを調整したままです。 これは、引き続く水平空白文字の列は分割されず、一続きのままに なるということです。 Unicode 11 はより Perl に一致するように過去のバージョンから 変更されましたが、まだいくつかの空白文字が分割を引き起こします: TAB, NO BREAK SPACE, FIGURE SPACE (U+2007)。 私たちはこれらに対する以前の Perl の調整を続けることにしました。

Unicode 特性値指定のワイルドカードに部分的に対応しました

正規表現パターン中で次のようなことができるようになりました:

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

これは数値が 0 から 5 であるすべての Unicode 符号位置にマッチングします。 従って、これはタイ語数字やベンガル語数字で 0, 1, 2, 3, 4, 5 を意味する ものにマッチングします。

これは Unicode Consortium が提案している正規表現機能を実装するための さらなる一歩となります。

ほとんどの特性に対応していて、残りは 5.32 に計画されています。 詳細は "Wildcards in Property Values" in 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 ビルドで意味を持つようになりました

-Dr フラグに饒舌フラグ (-Dv) を追加すると、すべての正規表現デバッグが 有効になるようになりました。

互換性のない変更

$[ への非ゼロの代入は致命的エラーになりました

$[ を非 0 にするのは Perl 5.12 から廃止予定でしたが、 これは致命的エラーを起こすようになりました。 "Assigning non-zero to $[ is fatal" in perldeprecation を 参照してください。

区切り文字は書記素でなければならなくなりました

"Use of unassigned code point or non-standalone grapheme for a delimiter." in perldeprecation を参照してください。

以前は廃止予定だった一部の正規表現パターン中のエスケープなしの左中かっこ "{" は不正になりました

しかし不必要にコードを破壊するのを避けるために、 廃止予定警告が出ていたほとんどの場合では、正当なままで残り、 非廃止予定警告が出るようになりました。 "Unescaped left braces in regular expressions" in perldeprecation を 参照してください。

以前は廃止予定だった :utf8 ハンドルでの sysread()/syswrite() は致命的エラーになりました

:utf8 ハンドルでの sysread(), syswrite(), send(), recv() の呼び出しは、 明示的であれ暗黙的であれ、致命的エラーになりました。 これは perl 5.24 で廃止予定になっていました。

これらを :utf8 ハンドルで呼び出すことには二つの問題がありました:

[perl #125760].

偽条件での my() は禁止されました

my $x if 0 のような宣言はもはや許されません。

[perl #133543].

$* と $# は致命的エラーになりました

これらの特殊変数は、長い間廃止予定でしたが、使うと例外が 起こるようになりました。

[perl #133583].

修飾されない dump() の使用は致命的エラーになりました

dump() 関数は、長い間非推奨でしたが、 CORE::dump() のように完全修飾しない限り使えなくなりました。

[perl #133584].

File::Glob::glob() は削除されました

File::Glob::glob() 関数は、長い間廃止予定でしたが、今回削除され、 代わりに File::Glob::bsd_glob() を使うように助言する 例外が発生するようになりました。

[perl #133586].

pack() はもはや不正な UTF-8 を返さなくなりました

UTF-8 文字列を返すべきところで不正な UTF-8 を含んでいる場合、 croak します。 これはセキュリティ上の脅威の可能性から保護します。 これはバグ修正とも考えられます。 [perl #131642].

Common 用字にはいくつかの数字の集合があります。 [0-9] は最も親しまれているものです。 しかし [\x{FF10}-\x{FF19}] (FULLWIDTH DIGIT ZERO - FULLWIDTH DIGIT NINE) もあり、また MATHEMATICAL DOUBLE-STRUCK DIGIT のような 数学記法のためのいくつかの集合があります。 これらの集合のいずれも、たとえばギリシャ語の用字並びに現れることが出来ます。 しかし 5.30 の設計は ASCII 数字 [0-9] 以外の全てを見落としており、 設計には欠陥がありました。 これは修正され、バグ修正と非互換性の両方をもちます。 [perl #133547].

ある並びの中の全ての数字は同じ集合の 10 の数字である必要があるのは そのままです。

JSON::PP はデフォルトで allow_nonref が有効になりました

JSON::XS 4.0 はポリシーを変更してデフォルトで allow_nonref が 有効になったので、JSON::PP もデフォルトで allow_nonref を 有効にするようになりました。

廃止予定

XS コードの中での、UTF-8 を扱う様々なマクロ

この廃止予定は 5.30 で致命的エラーになる予定でしたが、 一部の CPAN モジュールで判明した問題により 5.32 に延期されました。 何が影響を受けるか任官する詳細については、 perldeprecation を 参照してください。

性能改善

モジュールとプラグマ

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

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

以下のモジュールは将来のリリースでコア配布から削除され、その時点で CPAN からインストールされる必要があるようになります。 これらのモジュールを必要とする CPAN 配布はこれらを依存関係に入れる 必要があります。

これらのモジュールのコア版は、この事実を知らせるために、 "deprecated" カテゴリの警告を発生させます。 この廃止予定警告を止めるには、対象のモジュールを CPAN からインストールしてください。

これらは(まれな例外を除いて)使い続けることを勧められる、 良いモジュールであることに注意してください。 コアからの除去は基本的に、完全な機能を持ち、CPAN が利用可能な Perl の インストールに対する必要性を基準としていて、通常はその設計は考慮していません。

文書

既存の文書の変更

私たちはこの文書で挙げられた変更を反映するように文書を更新しようとしています。 もし抜けている物を発見したら、 perlbug@perl.org にメールしてください。

perlapi

perlop

perlreapi, perlvar

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 がシェルに渡されるのを妨げ、 この変数がテストやビルドの処理に渡されるのを妨げるので、 perl を実行しても libperl.dylib を見つけられません。

これを回避するために、perl 実行ファイルの初期ビルドは ビルドディレクトリに libperl.dylib があることを想定し、 それからライブラリパスがインストール中にインストールされたライブラリを 示すように調整されます。

[perl #126706].

Minix3

Minix3 へのいくらかの対応が再び追加されました。

Cygwin

Cygwin は cuserid を見えるようにしません。

Win32 Mingw

C99 算術関数が利用可能になりました。

Windows

内部の変更

バグ修正の抜粋

Acknowledgements

Perl 5.30.0 は、Perl 5.28.0 以降、58 人の作者によって、 1,300 のファイルに約 620,000 行の変更を加えて、 約 11 ヶ月開発されてきました。

自動生成ファイル、文書、リリースツールを除くと、750 の .pm, .t, .c, .h ファイルに約 510,000 行の変更を加えました。

Perl は、活気のあるユーザーと開発者のコミュニティのおかげで 30 年を超えて 繁栄しています。 以下の人々が、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 バグトラッカーに問題を報告をしてくれた (とてもありがたい)貢献者の 名前を含んでいません。 このリリースで注目するべき点は、多くのバグ修正は、 AFL による ファジングによって発見された Sergey Aleynikov による高品質の perlbug 報告によって行われたということです。

このバージョンに含まれている変更の多くは、Perl コアに含まれている CPAN モジュール由来のものです。 私たちは Perl の発展を助けている CPAN コミュニティ全体に感謝します。

全ての Perl の歴史的な貢献者のより完全な一覧については、どうか Perl ソース 配布に含まれている AUTHORS を参照してください。

バグ報告

もしバグと思われるものを見つけたら、 https://rt.perl.org/ にある perl バグ データベースを確認してください。 Perl ホームページ、http://www.perl.org/ にも情報があります。

もしまだ報告されていないバグだと確信したら、そのリリースに含まれている perlbug プログラムを実行してください。 バグの再現スクリプトを十分小さく、しかし有効なコードに切りつめることを 意識してください。 バグレポートは perl -V の出力と一緒に perlbug@perl.org に送られ Perl porting チームによって解析されます。

報告しようとしているバグがセキュリティに関するもので、公開されている メーリングリストに送るのが不適切なものなら、バグの報告方法の詳細について "SECURITY VULNERABILITY CONTACT INFORMATION" in perlsec を参照してください。

感謝を伝える

もし Perl 5 でなされた作業について Perl 5 Porters に感謝したいと考えたなら、 perlthanks プログラムを実行することでそうできます:

    perlthanks

これは Perl 5 Porters メーリングリストにあなたの感謝の言葉をメールします。

SEE ALSO

変更点の完全な詳細を見る方法については Changes ファイル。

Perl のビルド方法については INSTALL ファイル。

一般的なことについては README ファイル。

著作権情報については Artistic 及び Copying ファイル。