perl5340delta - perl v5.34.0 での変更点
この文書は 5.32.0 リリースと 5.34.0 リリースの変更点を記述しています。
5.30.0 のような以前のリリースから更新する場合は、まず 5.30.0 と 5.32.0 の違いについて記述している perl5320delta を読んでください。
try
/catch
記法を提供するための初期の実験的な試みが追加されました。
use feature 'try';
try {
a_function();
}
catch ($e) {
warn "An error occurred: $e";
}
さらなる情報については、"Try Catch Exception Handling" in perlsyn を 参照してください。
qr/{,n}/
が受け入れられます{,3}
のような、正規表現量指定子の下弦を空にするのが 許されるようになりました。
(ダブルクォート風コンテキストと正規表現の内部)
これは、もし望むなら \x{ FFFC }
のように書けるということです。 これはこのような構文全て、つまり \b{}
, \g{}
, \k{}
, \N{}
, \o{}
, \x{}
に適用されます; 正規表現量指定子 {m,n}
も同様です。 \p{}
と \P{}
は、例え緩い方でも、既にある Unicode 標準 ("Properties accessible through \p{} and \P{}" in perluniprops 参照) で 定められた規則のままです。
この機能は、/x
正規表現パターン修飾子の有無に関わらず有効です。
さらに、正規表現中かっこ量指定子のカンマは、 qr/a{ 5, 7 }/
のように、カンマの前後に空白 (タブかスペース)を置くことができます。
0oddddd
既にある 16 進リテラル 0xddddd
と 2 進リテラル 0bddddd
の 構文と並列な、0o123_456
のような 0o
接頭辞を付けた 8 進 リテラルを指定できるようになりました。 また、組み込みの oct()
関数はこの新しい文法を 受け付けるようになりました。
"Scalar value constructors" in perldata と "oct EXPR" in perlfunc を 参照してください。
RegEx のメモリリークを修正しました [GH #18604]
ExtUtils::PL2Bat 0.004 が Perl コアに追加されました。
このモジュールは、pl2bat
スクリプトの一般化です。 これはスクリプトとして、このコードから少なくとも二つのフォークを 引き起こしました; このモジュールはテスト付きの一つの実装として 統合します。
Archive::Tar はバージョン 2.36 から 2.38 に更新されました。
autodie はバージョン 2.32 から 2.34 に更新されました。
B はバージョン 1.80 から 1.82 に更新されました。
B::Deparse はバージョン 1.54 から 1.56 に更新されました。
bytes はバージョン 1.07 から 1.08 に更新されました。
Carp はバージョン 1.50 から 1.52 に更新されました。
Compress::Raw::Bzip2 はバージョン 2.093 から 2.101 に更新されました。
Compress::Raw::Zlib はバージョン 2.093 から 2.101 に更新されました。
Config::Perl::V はバージョン 0.32 から 0.33 に更新されました。
CPAN はバージョン 2.27 から 2.28 に更新されました。
Data::Dumper はバージョン 2.174 から 2.179 に更新されました。
DB はバージョン 1.58 から 1.59 に更新されました。
DB_File はバージョン 1.853 から 1.855 に更新されました。
Devel::Peek はバージョン 1.28 から 1.30 に更新されました。
Devel::PPPort はバージョン 3.57 から 3.62 に更新されました。
新しい PERL_VERSION_*
比較マクロが利用可能になりました。
ppport.h --api-info
は、唯一のマッチングでない限り 非 API 情報を含まなくなりました。
Digest はバージョン 1.17_01 から 1.19 に更新されました。
Digest::MD5 はバージョン 2.55_01 から 2.58 に更新されました。
DynaLoader はバージョン 1.47 から 1.50 に更新されました。
Encode はバージョン 3.06 から 3.08 に更新されました。
Env はバージョン 1.04 から 1.05 に更新されました。
Errno はバージョン 1.30 から 1.33 に更新されました。
experimental はバージョン 0.020 から 0.024 に更新されました。
Exporter はバージョン 5.74 から 5.76 に更新されました。
ExtUtils::CBuilder はバージョン 0.280234 から 0.280236 に更新されました。
ExtUtils::Install はバージョン 2.14 から 2.20 に更新されました。
ExtUtils::MakeMaker はバージョン 7.44 から 7.62 に更新されました。
ExtUtils::Manifest はバージョン 1.72 から 1.73 に更新されました。
ExtUtils::Miniperl はバージョン 1.09 から 1.10 に更新されました。
ExtUtils::ParseXS はバージョン 3.40 から 3.43 に更新されました。
ExtUtils::Typemaps はバージョン 3.38 から 3.43 に更新されました。
Fcntl はバージョン 1.13 から 1.14 に更新されました。
feature はバージョン 1.58 から 1.64 に更新されました。
デフォルトで有効な bareword_filehandles
機能の追加。
新しい multidimensional 機能が追加されました; これはデフォルトで有効ですが 多元配列エミュレーション を オフにできます。
File::Copy はバージョン 2.34 から 2.35 に更新されました。
File::Fetch はバージョン 0.56 から 1.00 に更新されました。
File::Find はバージョン 1.37 から 1.39 に更新されました。
File::Path はバージョン 2.16 から 2.18 に更新されました。
File::Spec はバージョン 3.78 から 3.80 に更新されました。
File::Temp はバージョン 0.2309 から 0.2311 に更新されました。
Filter::Util::Call はバージョン 1.59 から 1.60 に更新されました。
FindBin はバージョン 1.51 から 1.52 に更新されました。
GDBM_File はバージョン 1.18 から 1.19 に更新されました。
より新しいバージョンの GDBM のための新しい関数と互換性。 [GH #18435]
Getopt::Long はバージョン 2.51 から 2.52 に更新されました。
Getopt::Std はバージョン 1.12 から 1.13 に更新されました。
Hash::Util はバージョン 0.23 から 0.25 に更新されました。
Hash::Util::FieldHash はバージョン 1.20 から 1.21 に更新されました。
I18N::LangTags はバージョン 0.44 から 0.45 に更新されました。
if はバージョン 0.0608 から 0.0609 に更新されました。
IO はバージョン 1.43 から 1.46 に更新されました。
IO::Socket は、エラーメッセージを $@
に加えて $IO::Socket::errstr
にも保管するようになりました。
error
メソッドは、ソケットやキャラクタデバイスに対して 入力と出力の両方のストリームのエラー状態を報告します。 同様に、clearerr
は両方のストリームのエラー状態をクリアします。
中将のファイルハンドルに対して報告されていた誤ったエラーは IO::Handle で修正されました。 [GH #18019]
IO-Compress はバージョン 2.093 から 2.102 に更新されました。
bin/zipdetails バージョン 2.02
IO::Socket::IP はバージョン 0.39 から 0.41 に更新されました。
IO::Zlib はバージョン 1.10 から 1.11 に更新されました。
IPC::SysV はバージョン 2.07 から 2.09 に更新されました。
JSON::PP はバージョン 4.04 から 4.06 に更新されました。
distribution はバージョン 3.11 から 3.13 に更新されました。
locale はバージョン 1.09 から 1.10 に更新されました。
Math::Complex はバージョン 1.5901 から 1.5902 に更新されました。
MIME::Base64 はバージョン 3.15 から 3.16 に更新されました。
Module::CoreList はバージョン 5.20200620 から 5.20210520 に更新されました。
Module::Load はバージョン 0.34 から 0.36 に更新されました。
Module::Load::Conditional はバージョン 0.70 から 0.74 に更新されました。
mro はバージョン 1.23 から 1.25_001 に更新されました。
Net::Ping はバージョン 2.72 から 2.74 に更新されました。
NEXT はバージョン 0.67_01 から 0.68 に更新されました。
ODBM_File はバージョン 1.16 から 1.17 に更新されました。
Opcode はバージョン 1.47 から 1.50 に更新されました。
overload はバージョン 1.31 から 1.33 に更新されました。
perlfaq はバージョン 5.20200523 から 5.20210411 に更新されました。
PerlIO::encoding はバージョン 0.28 から 0.30 に更新されました。
PerlIO::mmap はバージョン 0.016 から 0.017 に更新されました。
PerlIO::scalar はバージョン 0.30 から 0.31 に更新されました。
PerlIO::via::QuotedPrint はバージョン 0.08 から 0.09 に更新されました。
Pod::Checker はバージョン 1.73 から 1.74 に更新されました。
Pod::Html はバージョン 1.25 から 1.27 に更新されました。
Pod::Simple はバージョン 3.40 から 3.42 に更新されました。
Pod::Usage はバージョン 1.69 から 2.01 に更新されました。
POSIX はバージョン 1.94 から 1.97 に更新されました。
POSIX::signbit() の振る舞いが改良されました。 [GH #18441]
asctime
の文書は、結果が常に英語になることが明確化されました。 (地域化された結果のためには strftime
を使ってください。)
re はバージョン 0.40 から 0.41 に更新されました。
(さらなる情報については "Internal Changes" を参照してください。)
Safe はバージョン 2.41 から 2.43 に更新されました。
Socket はバージョン 2.029 から 2.031 に更新されました。
Storable はバージョン 3.21 から 3.23 に更新されました。
strict はバージョン 1.11 から 1.12 に更新されました。
subs はバージョン 1.03 から 1.04 に更新されました。
Symbol はバージョン 1.08 から 1.09 に更新されました。
Test::Harness はバージョン 3.42 から 3.43 に更新されました。
Test::Simple はバージョン 1.302175 から 1.302183 に更新されました。
Text::Balanced はバージョン 2.03 から 2.04 に更新されました。
threads はバージョン 2.25 から 2.26 に更新されました。
threads::shared はバージョン 1.61 から 1.62 に更新されました。
Tie::RefHash はバージョン 1.39 から 1.40 に更新されました。
Time::HiRes はバージョン 1.9764 から 1.9767 に更新されました。
Time::Local はバージョン 1.28 から 1.30 に更新されました。
Unicode::Collate はバージョン 1.27 から 1.29 に更新されました。
Unicode::Normalize はバージョン 1.27 から 1.28 に更新されました。
utf8 はバージョン 1.22 から 1.24 に更新されました。
version はバージョン 0.9924 から 0.9928 に更新されました。
warnings はバージョン 1.47 から 1.51 に更新されました。
Win32 はバージョン 0.53 から 0.57 に更新されました。
PFNRegGetValueA
の呼び出し仕様を修正しました。
Win32::IsSymlinkCreationAllowed()
, Win32::IsDeveloperModeEnabled()
, Win32::GetProcessPrivileges()
が 追加されました。
Windows 2000 より前のバージョンのための古いコードが削除されました。
XS::APItest はバージョン 1.09 から 1.16 に更新されました。
XS::Typemap はバージョン 0.17 から 0.18 に更新されました。
この文書は、Perl と共に出火されている文書の作者と捕手に関するガイドです。
この文書は Perl の新しい統治モデルに関するゴール、スコープ、システム、 ルールを記述しています。
その他の pod ファイル、特に perlpolicy は、これの採用を反映して 修正されました。
私たちはこの文書で挙げられた変更を反映するように文書を更新しようとしています。 もし抜けている物を発見したら、 https://github.com/Perl/perl5/issues でイシューを開いてください。
それに加えて、以下のような変更が行われました。
perlapi, perlguts, perlxs, and perlxstut は SvPV
より SvPVbyte
を好むようになりました。
Pumpking への参照を、より正確な用語、あるいは適切な場所では Steering Council に置き換えました。
The Perl Steering Council は セキュリティ問題へのフォールバック連絡先になりました。
この文書の表現を向上し、より多くの API 要素を文書化するする努力が 続けられました。
freenode IRC の URL が更新されました。
${"_<$filename"}
スカラ変数の記述が修正されました。
"not imported" 警告の追加の例が文書化されました。
The Perl FAQ は CPAN バージョン 5.20201107 に小さな改良を加えたものに 更新されました。
my() と state() は、 レキシカル変数は典型的には同じスコープや文の中で再宣言されるべきではないと いうことを読者に明示的に警告するようになりました。 [GH #18389]
localtime エントリは改良され、 この関数の結果は常に英語であることが記述されました。
msgsnd() は msgsnd()
へのパックされた MSG
引数に含まれている長さフィールドについて記述していました。 そのようなフィールドはありませんでした。 MSG
は型とメッセージの内容のみを含みます。
Better explanation of what happens when sleep
がゼロや負の値で呼び出されたときに起こることについて より良い説明をするようになりました。
例から join()
を除去することで split()
の文書を単純化しました。 [GH #18676]
全ての PR についてリモートトラックブランチを作る方法について 文書化しました。
PR をローカルブランチとして得る方法について文書化しました。
perlguts は、 SvPV
(およびその亜種) を呼び出すときに SvUTF8
を参照する必要性についてより詳しく説明するようになりました。 同じ文書の新しい "How do I pass a Perl string to a C library?" 節は、 SV の文字列値を読むためにいつどの形式のマクロを使うべきかを 議論しています。
my_rpeep
の例を修正しました。
特殊なサイズのフォーマットされた表示に関する節が追加されました。
<>
と <<>>
演算子は一般的に、 それぞれダイヤモンド演算子および二重ダイヤモンド演算子として 参照されていますが、それらの文書に以前は言及されていませんでした。
range op の振る舞いの変更について文書化しました。
例で誤った値が使われていたのが修正されました。
caller() は try{} ブロックを見ないことが文書化されました。
新しい例は、レキシカルな my
変数が for
ループの初期化の間にどのように宣言できるかを示します。
Perl がエンコードされていない文字列をどうするかの記述を修正しました。
次のような追加と変更が、警告や致命的エラーメッセージを含む診断出力に 行われました。 診断メッセージの完全な一覧については、perldiag を参照してください。
Bareword filehandle "%s" not allowed under 'no feature "bareword_filehandles"'
これは新しい bareword_filehandles 機能に 対応します。
Multidimensional hash lookup is disabled
これは新しい multidimensional 機能に 対応します。
Wide character in setenv key (encoding to utf8)
%ENV
経由でワイド文字を環境変数に入れようとするとこの警告が発生します。
ユーザー定義特性 ("User-Defined Character Properties" in perlunicode) の扱いで エラーに遭遇しました。 これらはプログラマが書いたサブルーチンなので、 エラーの主題はコンパイルや実行を妨げます。
Infinite recursion in user-defined property
ユーザー定義特性 ("User-Defined Character Properties" in perlunicode) は 他のユーザー定義特性の定義に依存できます。 依存の連鎖がこの特性に戻ってくると、このエラーを発生させるチェックが なければ無限再帰が起きます。
Timeout waiting for another thread to define \p{%s}
ユーザー定義特性 ("User-Defined Character Properties" in perlunicode) が最初に使われると、 その定義は調べられ、その後の仕様でより効率的に扱うために 内部形式に変換されます。 二つ以上のスレッドがこの処理をほぼ同時に使用とすると、 競合条件になることがあります。
Unknown user-defined property name \p{%s}
文法的に正当なユーザー定義特性の \p{...}
の中で特性を 使うように指定しましたが、その定義が見つかりませんでした。
Too few arguments for subroutine '%s' (got %d; expected %d)
サブルーチンの引数の数の不一致エラーは、与えられた引数の数と 想定される引数の数を含むようになりました。
Too many arguments for subroutine '%s' (got %d; expected %d)
サブルーチンの引数の数の不一致エラーは、与えられた引数の数と 想定される引数の数を含むようになりました。
Lost precision when %s %f by 1
この警告は、インクリメントの時には大きすぎる正数のとき、 デクリメントの時は小さすぎる負数のときにのみ発生していました。 これは、大きすぎる正数と小さすぎる負数の両方について 発生するようになりました。 [GH #18333]
\K not permitted in lookahead/lookbehind in regex; marked by <-- HERE in m/%s/
このエラーは、ネストした先読みに関係する一部の場合で誤って 発生していました。 これは修正されました。 [GH #18123]
この警告は、未初期化値が見つからない要素の結果の場合は、 配列やハッシュのインデックスを含むようになりました。 これは、インデックスが単純な非マジカル変数の場合にのみ起きます。
New option: HistItemMinLength
@@@@@@@@@@新しいオプション: HistItemMinLength
このオプションは、ヒストリに保管されなければならないコマンドの 最小長を制御します。 伝統的に、これは 2 に固定されていました。 デバッガを変更するのはしばしば危険で、新しいバグが報告されるので、 デバッガはデバッグされるようになりました。
Fix to i
and l
commands@@@@@@@@@@i
と l
コマンドの修正
i $var
と l $var
コマンドは再びレキシカル変数で 動作するようになりました。
incpath が libpth に漏れるのを防ぎました
利用可能なら realpath を使うようになりました。 (これはより多くの重複したパスを捕まえるかもしれません。)
実際に存在するパスのみを含むようになりました。
libpth から inc パスをフィルタリングしました。
stadtx hash support has been removed@@@@@@@@@@stadtx 対応は完全に除去されました
stadtx 対応は完全に除去されました。 以前は、PERL_HASH_FUNC_STADTX
で要求することができ、 デフォルトは 64 ビットビルドでした。 これは SipHash に置き換えられました。 SipHash は stadtx より厳格にレビューされています。
Configure
新しいプローブ は gcvt
/qgcvt
関数のバグっぽい libc 実装を調べます。 [GH #18170]
-Dusedefaultstrict
Perl は (-Dusedefaultstrict
設定オプションを使って) デフォルトで strict を有効にしてビルドできるようになりました。
これらのデフォルト strict は perl
が -e
や -E
経由で 実行されているときは適用されません。
この設定は開発目的のための診断機構を提供するためだけの物なので、 デフォルトでは未定義です。
Bison の対応最低バージョンは 2.4、最大は 3.7 になりました。
より新しい 64 ビット版の Intel C/C++ コンパイラが認識され、 正しいフラグ集合を持つようになりました。
Configure は va_copy
をチェックするときに SIGBUS を トラップするようになりました。
いくつかのシステムでは、va_copy
のようなものが必要かどうか 決定しようと試みると、想定している SIGSEGV ではなく SIGBUS となることがあり、以前はこれはコアダンプを引き起こしていました。
このリリースのその他の追加と変更を反映してテストが追加、変更されました。 さらに、主に以下のような変更が行われました:
Split t/opbasic/arith.t の中の Config 依存のテストを t/op/arith2.t に分離しました。
t/re/opt.t が追加されました; 正規表現最適化のためのテストハーネスを提供します。 [GH #18213]
@INC
にドットが必要な CPAN 配布のための回避策が削除されました [GH #18394]。 以前回避策が必要だった全ての配布は対応されました。
メニーコアプラットフォームで並列にテストをするとき、 テスト順序の論理性を減らしてテストスイートをいくらか早く 完了できるようになりました; 次のものを
PERL_TEST_HARNESS_ASAP=1
テストスイート実行中に指定します。
(plan9 のフォークである) i386 9front システムで Perl を ビルドできるようになりました。
i386 プラットフォームでの Plan9 の対応を改良しました。
10 を超える将来のバージョンの MacOS を扱えるように、 darwin 用ヒントファイルが更新されました。 [GH #17946]
Symbian に関連する対応コードは削除されました。 Symbian はモバイルデバイス向けのオペレーティングシステムです。 この対応が最後に更新されたのは 2009 年 7 月で、 プラットフォーム自身の最後の更新も 2012 年 10 月です。
Big Sur では、たとえ dlopen
があるふりをしていたとしても、 多くのシステムライブラリはもはや実際のファイルとしては存在しません; なので、ライブラリファイルが見つからなかったときは dlopen
に フォールバックするようになりました。 [GH #18407]
コードページが 65001 (UTF-8) に設定されているコンソールから非 ASCII 文字を 読み込むのは、Windows のバグによって壊れていました。 この問題の回避策が実装されました。 [GH #18701]
mingw ランタイムバージョン < 3.22 を使っての mingw.org コンパイラ (バージョン 3.4.5 以降) でのビルドは 再び動作するようになりました。 これは Perl 5.31.4 で壊れていました。
mingw ランタイムバージョン >= 3.21 を使っての mingw.org コンパイラ (バージョン 3.4.5 以降) でのビルドは (バージョン 5.3.0 までのコンパイラで) 動作するようになりました。
Makefile.mk と dmake 対応は削除されました。 nmake (Makefile) と GNU make (GNUmakefile) を使って Windows で Perl をビルドするのはまだ可能です。. [GH #18511]
perl は MS Windows で (32 ビットと 64 ビットの) mingw-w64 版の gcc を使って USE_QUADMATH
でビルドできるようになりました。 [GH #18465]
pl2bat.pl ユーティリティは use ExtUtils::PL2Bat
に必要になりました。 これは並列ビルドで失敗を引き起こすことがありました。
Windows は symlink() と readlink() に対応し、 lstat() は stat() の 別名ではなくなりました。 [GH #18005].
POSIX システムと異なり、Windows でシンボリックリンクを作るには、 権限昇格か、開発者モードを有効にした Windows 10 1703 以降が必要です。
stat FILEHANDLE
を含む stat() と lstat() は、 デバイス dev
と iノード番号 ino
について、常にゼロを返すのではなく 返されたものを展開する独自実装を使うようになりました。 リンク数を示す nlink
フィールドは常に展開されます。
${^WIN32_SLOPPY_STAT}
は 以前は nlink
フィールドが代入されているかどうかを制御するために、 値の取得と異なる Windows API 呼び出しを必要としていました。 nlink
と stat()
に必要なその他な情報は 単一の API 呼び出しで取得されるようになりました。
-r
と -w
演算子は、STDIN
, STDOUT
, STDERR
ハンドルに関して真を返すようになりました。 残念ながら、これらのハンドルの複製に関してはまだ 真を返しません。 [GH #8502].
stat() と lstat() で返される時刻は、夏時間補正をまたいでも 間違わなくなりました。 [GH #6080].
ファイルハンドルに対する -x
は、 Vista 以降対応するファイル名での -x
に一致するべきです。 [GH #4145].
-e '"'
はもはや誤って真を返さなくなりました。 [GH #12431].
Visual C++ と gcc のビルドで同じマニフェストを使うようになりました。
以前は、MSVC ビルドは組み込みの perlexe.manifest ではなく /manifestdependency フラグを使っていました; これにより、Windows 10 で GetVersionEx()
が誤ったバージョン番号を 返すというような問題を引き起こしていました。
ロケールカテゴリ LC_SYNTAX
と LC_TOD
が認識されるようになりました。 Perl では、これらを指定することができるという以外にこれらに対して 何もしません。 これらは LC_ALL
に含まれます。
-Dusequadmath
ビルドでの perl のフォーマットされた出力の実装において double と long double の引数の扱いが修正されました。
これは PerlIO_printf()
, croak()
, warn()
, sv_catpvf()
および これらの亜種に適用されます。
以前は quadmath
ビルドでは、次のようなコード:
PerlIO_printf(PerlIO_stderr(), "%g", somedouble);
または
PerlIO_printf(PerlIO_stderr(), "%Lg", somelongdouble);
は誤って例外 "panic: quadmath invalid format ..." を投げていました; 4 倍精度ビルドのために追加されたコードは NV
がこれらの関数に渡される唯一の浮動小数点形式であることを 仮定していたからです。
このコードはまた、標準 C long double 指定子 L
を NV
(4 倍精度では __float128
) であるかのように想定するので、 未定義な振る舞いとなっていました。
これらの関数は正しく double, long double, NV を受け付けるようになりました。
以前はビット単位シフト演算子の右オペランド(シフト量)は暗黙に IV から int にキャストされていましたが、これは IV が int に収まらない場合に 誤った結果を引き起こすことがありました。
また、INT_MIN ビットのシフトはシフト対象が変化していませんでした (負のシフトではなく 0 ビットシフトと扱われていました)。
cop_hints_exists_{pv,pvn,pvs,sv}
関数が追加されました; それぞれの値の揮発性のコピーを作る必要なしに 特定の cop のヒントハッシュの中のキーの存在のチェックを支援するためです。
XS や C コードをデバッグするときに DEBUG
マクロを使うための 助けが追加されました。 perl.h 内のコメントは DEBUG_PRE_STMTS
と DEBUG_POST_STMTS
を 記述します; これにより、errno
の保管と復元をしたり(この場合 DEBUG
呼び出しはこれを妨げます)、 あるいはタイムスタンプや、どのスレッドから来たかや、呼び出しの位置などを 表示したりするために #define
できます。 個々の DEBUG
呼び出しを編集することなしに何かを追いかけるための クイックハックをすることができます。
REFCOUNTED_HE_EXISTS
をコアの外側で利用できるようにしました
全ての SvTRUE
風の関数は引数を正確に 1 回だけ評価するようになりました。 5.32 では、単なる "SvTRUE
" in perlapi がそのように変更されました; 今回残り全ても同様になりました。
任意の A と B に対してパターン /A*B/ を考えるとき、 Unicode は一級市民になりました。 パターンマッチングのコードは A の並びにマッチングするために小さいループを 作ろうとします。 このロジックは UTF-8 に対応するために本当に更新されました。
re モジュールに新しい関数 optimization
が追加されました; これはコンパイルされた正規表現に関して発見された最適化データの ハッシュリファレンスを返すことができます。
PERL_GLOBAL_STRUCT
コンパイルオプションは除去され、 dVAR
の必要性もなくなりました。 dVAR
は、XS モジュールとの後方互換性のために PERL_CORE
の外側で 何もしないものとして定義されたままです。
新しい保存スタック型 SAVEt_HINTS_HH
が追加されました; これは SAVEt_HINTS
の以前の振る舞いをきれいにしたものです。 以前のバージョンでは、保存スタックにプッシュされた型と値は HINT_LOCALIZE_HH
ビットに含まれているヒントに依存していて、 これは保存スタックを調べる外部コードを複雑にしていました。 新しいバージョンは、違いを示すために異なる保存スタック型を使います。
新しい API 関数 "av_count" in perlapi が追加されました; これは 配列にいくつ要素があるかを見つけるための明らかに名前付けされた方法を 提供します。
%ENV
への設定は、キーの中の昇格された文字列を正しく扱えるようになりました。 以前は Perl は SV の内部 PV を直接 OS に送っていました; 5.18 からの値の扱いと同じように扱うようになりました: まず文字列を降格しようとします; これに失敗すると、警告を出して utf8 形式で使います。
regcomp.c のメモリリークを修正 [GH #18604]
pack/unpack format 'D' now works on all systems that could support it@@@@@@@@@@pack/unpack フォーマット 'D' は対応できる全てのシステムで動作するようになりました
以前は、NV == long double
なら、long double を持つ全ての プラットフォームで対応されました。 特に、これは 4 倍精度プラットフォームも対応されたということです。
不完全な op 木を定数畳み込みしようとしなくなりました [GH #18380]
連鎖比較 op 木の定数畳み込みは、特定の条件で失敗することがあり、 perl のクラッシュを引き起こしていました。 応急措置として、そのような op 木では定数畳み込みをしないようになりました。 これは [GH #17917] でも 対応しています。
%g
フォーマットは Ubuntu-18.04, NVSIZE == 8
で壊れていました [GH #18170]
gcvt
と qgcvt
関数のバグっぽい libc 実装により、 (s)printf
は %g
フォーマットされた数値を誤って切り詰めていました。 新しい Configure プローブはこれをチェックし、その結果により gcvt
と qgcvt
の代わりに libc の sprintf
を使います。
この修正の一部として追加されたテストは、一部の Windows ビルドでの 関連する問題も明らかにしました。 Windows での MINGW ビルドのための makefile はデフォルトで USE_MINGW_ANSI_STDIO
を使うように調整され、これも 正しい (s)printf
数値フォーマットを提供するようになりました。
op.c: use utf8
が有効のときに my $_
が隠されます [GH #18449]
The lexical topic feature experiment was Perl v5.24 で削除され、my $_
宣言はコンパイル時エラーになりました。 しかし、use utf8
が有効の場合は依然としてこの宣言をすることが可能でした。
regexec.c: アサート失敗の修正 [GH #18451]
ファジングにより多すぎる文字がバッファにコピーされたときに、 正規表現エンジンでアサート失敗を引き起こしていました。
semctl(), msgctl(), shmctl() は IPC_STAT
または GETALL
操作のために修正されたとき、 ARG
の UTF-8 フラグを正しくリセットするようになりました。
semctl()
, msgctl()
, shmctl()
は、 ARG
引数の値が IPC_SET
or SETALL
呼び出しの入力として使われる 場合は、その値を降格しようとするようになりました。 降格に失敗すると例外を投げます。
semctl()
, msgctl()
, shmctl()
が ARG
引数をポインタとして 扱う場合、未定義値はもはや警告を生成しなくなりました。 そのような呼び出しのほとんどでは、ポインタはどちらにしろ使われず、 これにより、基となる関数で使われない値に対して undef
を指定できるようになります。
値をバイトとして扱うために、 semop() は OPSTRING
引数を降格し、 msgsnd() は MSG
引数を降格し、 shmwrite は STRING
引数を降格するようになりました。 以前はこれらは昇格したままで、基となる関数呼び出しに 壊れた構造体を提供していました。
msgrcv() は、VAR
引数が変更されたときに 適切に UTF-8 フラグをリセットするようになりました。 以前は UTF-8 フラグがオンのままになり、VAR
の結果が 壊れることがありました。
スタックしたファイルテスト演算子で正しくマジックが 呼び出されるようになりました。 [GH #18293]
@ary = split(...)
最適化は、 もはやターゲットの配列を値のスタックとして切り替えなくなりました。 [GH #18232] https://github.com/Perl/perl5/pull/18014#issuecomment-671299506 の 議論も参照してください。
再帰する部分パターンを含む一部の正規表現が誤ってマッチングするバグが 修正されました。
Win32 では、waitpid(-1, WNOHANG)
が時々とても長い中断時間になる ことがありました。 [GH #16529]
MARK
と items
が BOOT
XSUB で正しく初期化されるようになりました。
左側の undef
に関係する一部のリスト代入は最適化されすぎて 正しくない結果になっていました。 [GH #16685], [GH #17816]
なし
なし
Kent Fredric (KENTNL) は 2021 年 2 月に亡くなりました。 ニュージーランド人で "huge geek" と自称していた Kent は、178 個の CPAN 配布の 作者またはメンテナであり、Gentoo Linux の Perl メンテナであり、 Perl コア配布の貢献者でした。 彼は彼の家族、友人、および世界中のオープンソースソフトウェアコミュニティに よって追悼されました。
Perl 5.34.0 は、Perl 5.32.0 以降、77 人の作者によって、 2,100 のファイルに約 280,000 行の変更を加えて、 約 10 ヶ月開発されてきました。
自動生成ファイル、文書、リリースツールを除くと、1,300 の .pm, .t, .c, .h ファイルに約 150,000 行の変更を加えました。
Perl は、活気のあるユーザーと開発者のコミュニティのおかげで 30 年を超えて 繁栄しています。 以下の人々が、Perl 5.34.0 になるための改良に貢献したことが分かっています:
Aaron Crane, Adam Hartley, Andy Dougherty, Ben Cornett, Branislav Zahradník, brian d foy, Chris 'BinGOs' Williams, Christian Walde (Mithaldu), Craig A. Berry, Dagfinn Ilmari Mannsåker, Dan Book, Daniel Böhmer, Daniel Laügt, Dan Kogai, David Cantrell, David Mitchell, Dominic Hamon, E. Choroba, Ed J, Eric Herman, Eric Lindblad, Eugene Alvin Villar, Felipe Gasper, Giovanni Tataranni, Graham Knop, Graham Ollis, Hauke D, H.Merijn Brand, Hugo van der Sanden, Ichinose Shogo, Ivan Baidakou, Jae Bradley, James E Keenan, Jason McIntosh, jkahrman, John Karr, John Lightsey, Kang-min Liu, Karen Etheridge, Karl Williamson, Keith Thompson, Leon Timmermans, Marc Reisner, Marcus Holland-Moritz, Max Maischein, Michael G Schwern, Nicholas Clark, Nicolas R., Paul Evans, Petr Písař, raiph, Renee Baecker, Ricardo Signes, Richard Leach, Romano, Ryan Voots, Samanta Navarro, Samuel Thibault, Sawyer X, Scott Baker, Sergey Poznyakoff, Sevan Janiyan, Shirakata Kentaro, Shlomi Fish, Sisyphus, Sizhe Zhao, Steve Hay, TAKAI Kousuke, Thibault Duponchelle, Todd Rinaldo, Tomasz Konojacki, Tom Hukins, Tom Stellard, Tony Cook, vividsnow, Yves Orton, Zakariyya Mughal, Михаил Козачков.
これはバージョンコントロール履歴から自動的に生成しているので、ほぼ確実に 不完全です。 特に、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 メーリングリストにあなたの感謝の言葉をメールします。
変更点の完全な詳細を見る方法については Changes ファイル。
Perl のビルド方法については INSTALL ファイル。
一般的なことについては README ファイル。
著作権情報については Artistic 及び Copying ファイル。