NAME

perl5360delta - perl v5.36.0 での変更点

DESCRIPTION

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

コアの拡張

use v5.36

いつも通り、use v5.36 は、このバージョンの Perl のための 機能の束をオンにします。

5.36 の束は signatures 機能を有効にします。 Perl バージョン 5.20.0 で導入され、それから何回か変更された サブルーチンシグネチャは、もはや実験的とは扱われなくなりました。 これは安定版の言語機能として扱われ、もはや警告を出さなくなりました。

    use v5.36;

    sub add ($x, $y) {
      return $x + $y;
    }

これにも関わらず、サブルーチンシグネチャのいくつかの要素はまだ 実験的なままです; 以降を参照してください。

5.36 の束は isa 機能を有効にします。 Perl バージョン 5.32.0 で導入されたこの演算子は、それから 変更されていません。 この演算子は安定した言語機能とみなされます。 さらなる詳細については "Class Instance Operator" in perlop を 参照してください。

5.36 の束はまた、indirect, multidimensional の各機能を 無効 にしました。 これらはそれぞれ、次のものを禁止します: ($x = new Class; のような) 「間接」メソッド呼び出し; 疎らな多次元配列をシミュレートするためのハッシュキーとしての リスト式の使用。 これらの変更の詳細は feature にありますが、短く言うと; これは use strict をもっと有効にしたものに少し似ていて、 有効性よりも大きな問題を引き起こす機能を無効にします。

さらに、use v5.36 は、use warnings を書いたかのように警告も 有効にします。

最後に、このリリースでは、v5.10 で導入されてから全ての機能の束に含まれていた 実験的な switch 機能は、v5.36 の束では取り除かれました。 (私たちの助言に反して) これを使いたい場合、明示的に有効にする必要があります。

-g コマンドラインオプション

新しいコマンドラインフラグである -g が利用可能です。 これは -0777 と似たような別名です。

さらなる情報については、"-g" in perlrun を参照してください。

Unicode 14.0 に対応しました

詳しくは https://www.unicode.org/versions/Unicode14.0.0/ を 参照してください。

正規表現集合はもはや実験的ではなくなりました

このリリースより前では、正規表現集合機能 (公式名は「拡張大かっこ文字クラス」 ("Extended Bracketed Character Classes") は実験的と考えられていました。 Perl バージョン 5.18.0 で導入され、 それから数回修正されたこれは、 安定版の言語機能として考えられるようになり、 もはや警告は表示されません。 "Extended Bracketed Character Classes" in perlrecharclass を参照してください。

可変長後方参照はもはやほとんど実験的ではなくなりました

このリリースの前では、あらゆる形式の可変長後方参照は、 実験的であると考えられてきました。 このリリースで、実験的なステータスは、捕捉かっこを含む後方参照のみに 縮小されました。 これは、次の場合に

    "aaz"=~/(?=z)(?<=(a|aa))/

マッチングと $1 への代入は "a" になるか "aa" になるかがはっきりしていないからです。 現在の所、これは可能な最大の選択肢である "aa" にマッチングします。 構文全体が、マッチングするべき時にだけマッチングするようになったことには 自信がありますが、現在の「最長マッチング」の振る舞いを維持することには 自信がありません。

SIGFPE はもはや遅れません

浮動小数点数例外は、SIGSEGV のようなその他の「失敗」系と同様に 直ちに配送されるようになりました。 つまり、そのようなシグナルを $SIG{FPE} ハンドラで捕捉する機会が 少なくとも 1 回あるということです; 例えば、die はそれを引き起こした perl での行を報告できます。

安定したブール値の追跡

しばしば !!0 and !!1 としてアクセスされ、 多くのコア関数と演算子から返される、「真」と「偽」のブール値は、 変数への代入を通してもブール値としての性質を保つようになりました。 builtin の新しい関数 is_bool() で、値がブール値の性質を 持つかかどうかをチェックできるようになりました。

これは、色々な用途の中でも、他の言語やデータ型直列化との相互運用に 有用でしょう。

一度に複数の値で反復する (実験的)

かっこの中にレキシカル変数のリストを指定することで、 一回当たり複数の値を反復できるようになりました。 例えば:

    for my ($key, $value) (%hash) { ... }
    for my ($left, $right, $gripping) (@moties) { ... }

perl v5.36 より前では、for my の後でリストを指定しようとすると 文法エラーでした。

この機能は今のところ実験的で、 experimental::for_list カテゴリの警告を引き起こします。 さらなる情報については "Compound Statements" in perlsyn を参照してください。 一度に n 回の foreach の便利ツールである、この文書の "builtin::indexed" も参照してください。

builtin 関数 (実験的)

新しいコアモジュール builtin が追加されました; これは、インタプリタ組み込みの、常に存在する関数の文書を提供します。

    say "Reference type of arrays is ", builtin::reftype([]);

これはまた、これらの関数の短い名前版を提供するためのレキシカルな インポート機構を提供します。

    use builtin 'reftype';
    say "Reference type of arrays is ", reftype([]);

この組み込み関数機構とそれが提供する関数は、現在の所全て 実験的 です。 builtin 自体は近い将来実験的であるのをやめる予定ですが、 その中の個々の関数は現行の基準で安定版になる予定です。 その他の関数は、時間とともに builtin に追加される予定です。

詳しくは builtin を参照してください; しかし、以下は v5.36 の組み込み関数の要約です:

builtin::trim

この関数は、引数を文字列として扱い、 その先頭と末尾の空白を削除した結果を返します。

builtin::indexed

この関数は、引数リストの 2 倍の大きさのリストを返します; それぞれのアイテムは、リストの中のインデックスが前に付きます。 これは主に、配列やリストに対して、ここのアイテムのインデックスも 追跡しながら反復するために、 複数の反復子変数を使うという、 新しい foreach 文法 を使うときに有効です:

    use builtin 'indexed';

    foreach my ($index, $val) (indexed @array) {
        ...
    }
builtin::true, builtin::false, builtin::is_bool

truefalse は、ブール値の真と偽の値を返します。 Perl は perl のままで、ブール値の厳密な型はありませんが、 これらの値はブール値として作られたことを知っています。 is_bool は、ある値がブール値として作られたということが 分かっているかどうかを返します。

builtin::weaken, builtin::unweaken, builtin::is_weak

これらの関数はそれぞれ次のことを行います: リファレンスを弱める; リファレンスを強める; リファレンスが弱いかどうかを返す。 (弱いリファレンスは、ガベージコレクションの目的では考慮されません; perlref を参照してください。) これらは Scalar::Util にある似たようなルーチンの代わりになります。

builtin::blessed, builtin::refaddr, builtin::reftype

これらの関数は、リファレンス(実際には非リファレンスも!)に関する さらなる情報を提供し、Scalar::Util にある似たようなルーチンの 代わりになります。

builtin::ceil, builtin::floor

ceil は、引数の値以上の最小の整数を返します。 floor は、引数の値以下の最大の整数を返します。 これらは POSIX にある似たような関数を置き換えられます。

defer ブロック (実験的

このリリースでは、defer 修飾子を前置したコードのブロックである defer ブロックの対応が追加されました; これらは後で、スコープの終了時に実行されるコード節を提供します。

手短に言うと、実行時に defer ブロックに到達したとき、 その中身は、囲んでいるスコープが終了したときに実行できるように取って 置かれます。 (他にも理由はありますが) defer ブロックを 含んでいる ブロックが、 そのブロックに到達する前に終了した場合、実行されない、という点で、 UNITCHECK と異なります。

defer ブロックは、オブジェクトのデストラクタによって実行される コードブロックを渡される「スコープガード」オブジェクトを 置き換えることができます。

さらなる情報については、"defer blocks" in perlsyn を参照してください。

try/catch は finally を使えるようになりました (実験的)

実験的な try/catch 構文は、finally キーワードで導入される オプションの 3 番目のブロックに対応するように拡張されました。

    try {
        attempt();
        print "Success\n";
    }
    catch ($e) {
        print "Failure\n";
    }
    finally {
        print "This happens regardless\n";
    }

これは、try/catch 構文の最後に、 たとえ例外または制御フローキーワードによって中断されても、 実行するコードを提供します。 これらは defer ブロックに似ています。

さらなる情報については、"Try Catch Exception Handling" in perlsyn を 参照してください。

クォート風演算子での非 ASCII 区切り文字 (実験的)

Perl は伝統的に文字列/パターンの区切り文字として 4 組だけを 許していました: ( ), { }, [ ], < > で、全て ASCII の範囲です。 Unicode にはさらに数百の可能性があり、 この機能を使うことでその多くを有効にします。 有効にすると、例えば qr« »use utf8; q𝄃string𝄂 のように できます。 詳しくは "The 'extra_paired_delimiters' feature" in feature を 参照してください。

@_ はシグネチャサブルーチンの中では実験的になりました

サブルーチンシグネチャは安定版になったにも関わらず、 シグネチャを持つサブルーチンで伝統的な引数配列 (@_) を使うのは実験的 のまま で、独自の警告カテゴリを持ちます。 experimental::signatures 警告カテゴリだけでは これを抑制するには不十分です。 新しい警告は experimental::args_array_with_signatures という カテゴリ名で出力されます。

シグネチャを持っていて、デフォルト引き数配列またはその要素 (@_ または $_[INDEX]) を、明示的または (引数なしの shift または pop のように) 暗黙的に使おうとするサブルーチンは、コンパイル時に警告を発生させます:

    use v5.36;

    sub f ($x, $y = 123) {
      say "The first argument is $_[0]";
    }

    Use of @_ in array element with signatured subroutine is experimental
    at file.pl line 4.

これをしようとするコードの振る舞いはもはや不定で、 将来のバージョンで変わるかもしれません。

互換性のない変更

物理的に空のソートはコンパイル時エラーになりました

    @a = sort @empty; # unaffected
    @a = sort;        # now a compile-time error
    @a = sort ();     # also a compile-time error

裸のソートは、空リストを作るための奇妙な方法でした; これはコンパイル時に croak するようになりました。 この変更は、将来 sort で行うかもしれない拡張のために文法上の空きを 作っておくためのものです。

廃止予定

use v5.11 の後での use VERSION (VERSION は v5.11 より前) は廃止予定です

use v5.11 以降のスコープ内では、 use vX の行 (X は v5.11 未満) は警告を出すようになりました:

    Downgrading a use VERSION declaration to below v5.11 is deprecated

例えば:

    use v5.14;
    say "The say statement is permitted";
    use v5.8;                               # This will print a warning
    print "We must use print\n";

これは、Perl チームはこの場合の振る舞いを変更する計画があるからです。 Perl v5.12 (および v5.11 の一部) から、 strict は 事前に無効にされていない限り 有効になります。 言い換えると:

    no strict;
    use v5.12;  # will not enable strict, because "no strict" preceded it
    $x = 1;     # permitted, despite no "my" declaration

将来、この振る舞いは取り除かれ、 use VERSION は、バージョン v5.12 以降の場合は、常に strict を 有効にします。

この方法でバージョンを混ぜたいコードは、 異なったバージョンの範囲がレキシカルに確実に分離されるように、 ブロック文法をによるレキシカルスコープを使うべきです。

    {
        use v5.14;
        say "The say statement is permitted";
    }

    {
        use v5.8;                           # No warning is emitted
        print "We must use print\n";
    }

もちろん、これはおそらくあなたが必要なものではないでしょう! 最初のブロックがコンパイルされると、あなたは perl v5.14.0 以降を 使うということです。

性能改善

モジュールとプラグマ

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

文書

新しい文書

Porting/vote_admin_guide.pod

この文書は、Perl Core Team の中での選挙や投票を運営する手続きを 提供しています。

既存の文書の変更

私たちはこの文書で挙げられた変更を反映するように文書を更新しようとしています。 もし抜けている物を発見したら、 https://github.com/Perl/perl5/issues でイシューを開いてください。

それに加えて、以下のような変更が行われました。

perlapi

perldeprecation

perlexperiment

perlgov

perlop

perlre

perlrun

診断メッセージ

次のような追加と変更が、警告や致命的エラーメッセージを含む診断出力に 行われました。 診断メッセージの完全な一覧については、perldiag を参照してください。

新しい警告メッセージ

新しいエラー

新しい警告

既存の診断メッセージの変更

設定とコンパイル

テスト

このリリースのその他の追加と変更を反映してテストが追加、変更されました。

プラットフォーム対応

Windows

VMS

keys %ENV on VMS returns consistent results

VMS では、%ENV ハッシュのエントリは 最初のアクセスで OS 環境から読み込まれるので、 %ENV の最初の反復は、全ての可能なキーを見つけるために環境変数全体が スキャンされる必要がありました。 この初期化は完全な反復では常に正しく行われていましたが、 以前はスカラコンテキストでの %ENV では起きていなかったので、 scalar %ENV とすると、それより前に %ENV アクセスがないと 0 を返し、 反復がない場合、アクセスされたキーの数だけを返していました。

これらのバグは修正されました; スカラコンテキストでの %ENVkeys %ENV は正しい結果、つまり環境変数の全てのキーの数を 返すようになりました。

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

AT&T UWIN

UWIN は Windows のための UNIX 互換層です。 最後のリリースは 2012 年で、最近は Cygwin に置き換えられています。

DOS/DJGPP

DJGPP は、DOS で動作する 32-bit x86 システムへの GNU ツールチェーンの移植です。 最後に知られている、ここで Perl をビルドしようとする試みは 5.20 に 対してのもので、miniperl をビルドしただけでした。

NetWare

Novell NetWare の対応コードは削除されました。 NetWare は Novell によるサーバオペレーティングシステムです。 この移植版が最後に更新されたのは 2002 年 7 月で、 プラットフォーム自体も 2009 年 5 月です。

2009 年 9 月に、無関係な変更が偶然 NetWare でのビルドを壊していましたが、 12 年間誰もこれを報告しませんでした。

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

z/OS

この更新では、EBCDIC 静的/動的と 31 ビット/64 ビットアドレッシング モードの Perl をビルドできるようになりました。 通過するテストの数は、これらの更新の前の基準と一貫しています。

これらの変更は、ASCII 静的/動的と 31 ビット/64 ビットアドレッシング モードの Perl を提供できる基本的な機能を提供します。

(以前は OS/390 と呼ばれていた) z/OS の README は、 ASCII ビルドと EBCDIC ビルドを記述するために更新されました。

内部の変更

バグ修正の抜粋

以前のリリースの訂正

おくやみ

1996 年から 2002 年の間に少なくとも 66 コミットを Perl 5 コア配布に行った Raun "Spider" Boardman (CPAN では SPIDB) は、2021 年 5 月 24 日に COVID の 合併症で亡くなりました。 お悔やみ申し上げます。

David H. Adler (DHA) は 2021 年 11 月 16 日に亡くなりました。 1997 年、David は最初の Perl ユーザーグループである NY.pm を共同設立し、 1998 年には、世界中のその他のユーザーグループの設立を助ける Perl Mongers を共同設立しました。 彼は北米とヨーロッパの両方の Perl conference に頻繁に出席し、 それらのカンファレンスでの Bad Movie Night 式典の主催者として よく知られていました。 彼はまた、コミュニティ貢献に対する White Camel 賞の運営を含む貢献を Perl Foundation にしていました。 お悔やみ申し上げます。

謝辞

Perl 5.36.0 は、Perl 5.34.0 以降、82 人の作者によって、 2,000 のファイルに約 250,000 行の変更を加えて、 約 1 年間開発されてきました。

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

Perl は、活気のあるユーザーと開発者のコミュニティのおかげで 30 年を超えて 繁栄しています。 以下の人々が、Perl 5.36.0 になるための改良に貢献したことが分かっています:

Alyssa Ross, Andrew Fresh, Aristotle Pagaltzis, Asher Mancinelli, Atsushi Sugawara, Ben Cornett, Bernd, Biswapriyo Nath, Brad Barden, Bram, Branislav Zahradník, brian d foy, Chad Granum, Chris 'BinGOs' Williams, Christian Walde (Mithaldu), Christopher Yeleighton, Craig A. Berry, cuishuang, Curtis Poe, Dagfinn Ilmari Mannsåker, Dan Book, Daniel Laügt, Dan Jacobson, Dan Kogai, Dave Cross, Dave Lambley, David Cantrell, David Golden, David Marshall, David Mitchell, E. Choroba, Eugen Konkov, Felipe Gasper, François Perrad, Graham Knop, H.Merijn Brand, Hugo van der Sanden, Ilya Sashcheka, Ivan Panchenko, Jakub Wilk, James E Keenan, James Raspass, Karen Etheridge, Karl Williamson, Leam Hall, Leon Timmermans, Magnus Woldrich, Matthew Horsfall, Max Maischein, Michael G Schwern, Michiel Beijen, Mike Fulton, Neil Bowers, Nicholas Clark, Nicolas R, Niyas Sait, Olaf Alders, Paul Evans, Paul Marquess, Petar-Kaleychev, Pete Houston, Renee Baecker, Ricardo Signes, Richard Leach, Robert Rothenberg, Sawyer X, Scott Baker, Sergey Poznyakoff, Sergey Zhmylove, Sisyphus, Slaven Rezic, Steve Hay, Sven Kirmess, TAKAI Kousuke, Thibault Duponchelle, Todd Rinaldo, Tomasz Konojacki, Tomoyuki Sadahiro, Tony Cook, Unicode Consortium, Yves Orton, Михаил Козачков.

これはバージョンコントロール履歴から自動的に生成しているので、ほぼ確実に 不完全です。 特に、Perl バグトラッカーに問題を報告をしてくれた (とてもありがたい)貢献者の 名前を含んでいません。

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

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

バグ報告

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

もしまだ報告されていないバグだと確信したら、 https://github.com/Perl/perl5/issues にイシューを登録してください。 バグの再現スクリプトを十分小さく、しかし有効なコードに切りつめることを 意識してください。

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

感謝を伝える

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

    perlthanks

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

SEE ALSO

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

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

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

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