これは、Ubuntu Online、Fedora Online、Windowsオンラインエミュレーター、MACOSオンラインエミュレーターなどの複数の無料オンラインワークステーションの5200つを使用してOnWorks無料ホスティングプロバイダーで実行できるコマンドperlXNUMXdeltaです。
プログラム:
NAME
perl5200delta-perlv5.20.0の新機能
DESCRIPTION
このドキュメントでは、5.18.0リリースと5.20.0リリースの違いについて説明します。
5.16.0などの以前のリリースからアップグレードする場合は、最初にperl5180deltaを読んでください。
5.16.0と5.18.0の違いを説明しています。
ペース: 機能強化
実験的 サブルーチン 署名
引数リストをレキシカル変数にアンラップする宣言構文。 "サブ foo ($a,$b)
{...}" は、引数の数をチェックし、引数をレキシカル変数に入れます。
署名は、「sub foo { my($a,$b) = @_; ... }」の既存のイディオムと同等ではありません。
署名は、デフォルト以外の機能を有効にすることによってのみ使用でき、警告を生成します
実験的であることについて。 プロトタイプとの構文上の衝突は、
署名が有効な場合の短いプロトタイプ構文。
詳細については、perlsub の「署名」を参照してください。
「サブ」 今 取る a "プロトタイプ" 属性を使用する。
「サブ」を宣言または定義するときに、プロトタイプを「サブ」の内部で指定できるようになりました
名前に続く括弧の代わりに「prototype」属性。
たとえば、「sub foo($$){}」は「sub foo : プロトタイプ($$){}」と書き換えることができます。
その他 整合性のある プロトタイプ 解析する
サブルーチン プロトタイプでの複数のセミコロンは、長い間許容されており、
単一のセミコロン。 これが起こらなかった XNUMX つのケースがありました。 サブルーチン
プロトタイプが「*」または「;*」で始まる場合、ベアワードがメソッドと見なされるかどうかに影響します
名前またはサブコール。 これは ";;;*" にも適用されるようになりました。
サブルーチンのプロトタイプ内では長い間空白が許可されてきたので、"sub( $ $ )" は
「sub($$)」と同等ですが、今まではサブルーチンが解析されるときに取り除かれていました。
したがって、空白は "Scalar::Util::set_prototype" によって設定されたプロトタイプで許可されます。 今
これは許可され、パーサーは空白を削除しなくなりました。 これは「プロトタイプ」を意味します
&mysub" は、元のプロトタイプ、空白、およびすべてを返します。
「ランド」 今 使用されます a 整合性のある ランダム 数 ジェネレータ
以前は、perl はプラットフォーム固有の乱数ジェネレーターを使用していました。
libcの rand(), ランダム() or drand48().
これは、perl の乱数の品質がプラットフォームごとに異なることを意味していました。
の15ビットから rand() Windows で Linux などの POSIX プラットフォームで 48 ビットに
drand48().
Perl は独自の internal を使用するようになりました drand48() すべてのプラットフォームでの実装。 これはしません
perl の "rand" を暗号的に安全にします。 [パール#115928]
New スライス 構文
新しい %hash{...} および %array[...] 構文は、キー/値 (またはインデックス/値) のリストを返します
ペア。 perldata の「キー/値のハッシュ スライス」を参照してください。
実験的 Postfixの 間接参照
「postderef」機能が有効な場合、次の構文上の同等性が設定されます。
アップ:
$sref->$*; # ${ $sref } と同じ # 補間
$aref->@*; # @{ $aref } と同じ # 補間
$href->%*; # %{ $href } と同じ
$cref->&*; # &{ $cref } と同じ
$gref->**; # *{ $gref } と同じ
$aref->$#*; # $#{ $aref } と同じ
$gref->*{ $slot }; # *{ $gref }{ $slot } と同じ
$aref->@[ ... ]; # @$aref[ ... ] と同じ # 補間
$href->@{ ... }; # @$href{ ... } と同じ # 補間
$aref->%[ ... ]; # %$aref[ ... ] と同じ
$href->%{ ... }; # %$href{ ... } と同じ
関連する「postderef_qq」機能が
も有効にします。 この特徴は 実験的 そしてトリガーします
"experimental::postderef" カテゴリの警告が使用された場合 (抑制されていない場合)。
詳細については、perlref の Postfix Dereference Syntax セクションを参照してください。
Unicode 6.3 今 。
Perl は現在、Unicode 6.3 をサポートし、同梱されています (ただし、Perl は任意の
以前の Unicode リリースも同様です)。 Unicode 6.3 の変更点の詳細なリストは、次の場所にあります。
<http://www.unicode.org/versions/Unicode6.3.0/>.
New "\ p {Unicode}" レギュラー 表現 パターン 財産
これは "\p{Any}" の同義語であり、Unicode 定義のコード ポイント 0 ~ のセットに一致します。
0x10FFFF。
より良いです 64ビット 対応
64 ビット プラットフォームでは、内部配列関数が 64 ビット オフセットを使用するようになり、Perl
利用可能なメモリがある場合、2**31 を超える要素を保持する配列。
正規表現エンジンは、2**31 文字を超える文字列をサポートするようになりました。 [パール
#112790、#116907]
関数 PerlIO_get_bufsiz、PerlIO_get_cnt、PerlIO_set_cnt、および PerlIO_set_ptrcnt が現在
int ではなく SSize_t を使用して、値とパラメーターを返します。
"使用する ロケール」 今 仕組み on UTF-8 ローカル
このリリースまでは、ISO 8859 シリーズなどのシングルバイト ロケールのみがサポートされていました。
現在、ますます一般的なマルチバイト UTF-8 ロケールもサポートされています。 UTF-8 ロケール
文字セットが Unicode でエンコーディングが UTF-8 のものです。 POSIX
「LC_CTYPE」カテゴリ操作 (大文字と小文字の変更 (「lc()」、「\U」など)、および文字
そのようなロケールの下での分類 ("\w", "\D", "qr/[[:punct:]]/")) は、そうでない場合と同じように機能します
ロケールの下で、代わりに「use feature 'unicode_strings'」の下であるかのように、テイント ルールを除いて
従います。 このリリースでは、ソートはコード ポイント順のままです。 [perl #56820]。
"使用する ロケール」 今 コンパイルする on システム 無し ローカル 能力
以前はこれを行うと、プログラムがコンパイルされませんでした。 その範囲内でプログラム
"C" ロケールであるかのように動作します。 したがって、ロケールをサポートするプラットフォーム用に作成されたプログラム
変更なしで、ロケールのないプラットフォームで実行できます。 ロケールを別の場所に変更しようとします。
もちろん、「C」ロケールは失敗します。
その他 ローカル 初期化 フォールバック オプション
Perl の起動時にロケールにエラーが発生した場合、すぐにあきらめて試行しました
「C」ロケールを使用します。 これで、最初に環境によって指定された他のロケールを使用しようとします
perllocale の "ENVIRONMENT" に詳述されている変数。 たとえば、「LC_ALL」と
"LANG" が両方とも設定されており、"LC_ALL" ロケールの使用が失敗した場合、Perl は "LANG" を試行します
それが失敗した場合にのみ、「C」にフォールバックします。 Windows マシンでは、Perl は
環境によってすべてのロケールが指定されている場合は、「C」を使用する前に、システムのデフォルト ロケールを試してください。
変数は失敗します。
"-DL" ランタイム オプション 今 追加されました の トレース ローカル 設定
これは、Perl コア開発者がバグのフィールド デバッグを支援するために設計されています。
ローカル
-F 今 含意する -a -a 含意する -n
以前に -F 無し -a ノーオペレーションであり、 -a 無し -n or -p これでノーオペレーションでした
提供する場合は変更します -F 次に両方 -a -n 暗示され、あなたが提供する場合 -a その後 -n is
暗黙のうちに。
あなたはまだ使うことができます -p その特別な振る舞いのために。 [パール #116190]
$a $b 警告 免除
「ソート」で使用される特殊変数 $a および $b は、「一度だけ使用」警告から除外されるようになりました。
「ソート」が使用されていない場合でも。 これにより、CPAN モジュールが機能を提供しやすくなります。
同様の目的で $a と $b を使用します。 [perl #120462]
セキュリティ
避ける 可能 read of 自由()d っ 間に 解析する
可能だった 自由()d 異常な状態で解析中にメモリを読み取ることができた
Perl プログラムがヒアドキュメントで終わり、ファイルの最後の行が
終了改行文字のないディスク。 これは修正されました。
互換性がない 変更
"行う" できる いいえ より長いです be 中古 〜へ コール サブルーチン
"do SUBROUTINE(LIST)" フォームは、Perl v5.0.0 以降、非推奨の警告になりました。
となり、構文エラーになります。
引用のような 脱出 変更
二重引用符で囲まれた文字列 ("..." または qq(...)) または通常の "\c" の後の文字
式は印刷可能な文字にする必要があり、"{" は使用できません。
"\B" または "\b" の後のリテラル "{" は致命的になりました。
これらは perl v5.14.0 で廃止されました。
汚染 起こります 下 よ 状況; 今 適合します 〜へ ドキュメント
これは、正規表現の一致と文字列の大文字と小文字の変更 ("lc"、"\U"、
等.) 「使用ロケール」の範囲内。 結果は操作に基づいて汚染されています。
ドキュメント (perlsec, "SECURITY"
in perllocale) はそうすべきであることを示します。 以前は、大文字小文字の変更操作の場合、
string には、大文字と小文字の変更がロケールの影響を受ける可能性のある文字が含まれていませんでした。
結果は汚染されません。 たとえば、空の文字列または XNUMX つに対する "uc()" の結果
Latin1 より上のコード ポイントのみを含むものは現在汚染されており、以前はそうではありませんでした。 これはにつながります
より一貫した汚染結果。 正規表現パターンは非バイナリを汚染します
結果 ($&、$2 など) は、一致が依存する要素がパターンに含まれている場合にのみ
現在の (潜在的に汚染された) ロケールで。 ケースチェンジ機能と同様に、実際の
一致する文字列の内容は、以前は問題でしたが、現在は問題ではありません。 為に
たとえば、パターンに「\w」が含まれている場合、一致したとしても結果は汚染されます。
成功または失敗するためにパターンのその部分を使用する必要はありません。
一致はロケールによって異なります。 ただし、たとえば、「。」 パターンでは有効になりません
汚染、ドットは任意の XNUMX 文字に一致するため、現在のロケールは何か
一致するものと一致しないものはまったく変わりません。
"\p{}", "\P{}" マッチング 持っています 変更 の 非Unicode コード を指しています。
"\p{}" と "\P{}" は、Unicode 定義のコード ポイント ("U+0000"
「U+10FFFF」まで)。 これらの正当な Unicode コード ポイントの一致に関する動作は次のとおりです。
変更はありませんが、コード ポイント 0x110000 以上に変更があります。 以前、パール
これらに対して "\p{}" と "\P{}" を照合した結果を "undef" として扱いました。
「偽」に変換されます。 "\P{}" の場合、これは "true" に補完されました。 警告
これが起こったときに引き上げられるはずでした。 ただし、さまざまな最適化により、
警告を防ぎ、結果はしばしば直観に反するものでした。
その見かけの補数は偽です。 すべての非 Unicode コード ポイントが次のように扱われるようになりました。
割り当てられていない典型的な Unicode コード ポイント。 これは一般的に、より Do-What-I-Mean です。 警告
結果が厳密な Unicode アプローチとほぼ間違いなく異なる場合にのみ発生し、
Perl が行っていたことから。 厳密に Unicode に準拠する必要があるコードは、これを行うことができます
警告致命的であり、Perl は常に警告を発します。
詳細は perlunicode の「Beyond Unicode コード ポイント」にあります。
「\ p {すべて}」 持っています き 拡大 〜へ match を 可能 コード ポイント
Perl 定義の正規表現パターン要素「\p{All}」は、CPAN では使用されず、
Unicode コード ポイントのみに一致します。 これで、可能なすべてのコード ポイントに一致します。 それだ
「qr/./s」と同等です。 したがって、"\p{All}" はもはや "\p{Any}" と同義ではありません。
Unicode が言うように、Unicode コード ポイントのみに一致し続けます。
データ::ダンパー 出力 かもしれません 変化する
ダンプされたデータ構造と Data::Dumper の設定に応じて、ダンプされた
出力が以前のバージョンから変更されている可能性があります。
Data::Dumper の正確な出力に依存するテストがある場合、失敗する可能性があります。
コードでこの問題を回避するには、評価からデータ構造に対してテストします。
ダンプ自体ではなく、ダンプされた構造。
ロケール 10進数 ポイント 文字 いいえ より長いです 漏れ 外側 of "使用する ロケール」 スコープ
これは実際にはバグ修正ですが、一部のコードはバグの存在に依存するようになっているため、
この変更はここにリストされています。 プログラムが実行されている現在のロケールは
「使用ロケール」の範囲内を除いて、Perl コードから見えるはずです。 でも、
これまで、特定の状況下で、小数点に使用されていた文字 (多くの場合、
コンマ) がスコープ外に漏れました。 コードがこの変更の影響を受ける場合は、単純に
「ロケールを使用」。
割り当て of Windows ソケット エラー コード 〜へ $! 今 好む エラー番号.h 値 が
WSAGetLastError() 値
以前のバージョンの Perl では、Windows ソケットのエラー コードは、 WSAGetLastError()
$! に割り当てられ、ECONABORTED などの一部の定数は、 エラー番号.h VC++ (または
gcc のさまざまな Windows ポート) が対応する WSAE* 値に定義され、$!
Errno および POSIX によってエクスポートされた E* 定数に対してテストされます。
これは、値を持つ新しい E* 定数が導入された VC++ 2010 以降まではうまく機能していました。
> 100 に エラー番号.h、一部は perl によって WSAE* 値に (再) 定義されています。 それが原因
元の定義を使用する他のライブラリに対して XS コードをリンクする際の問題
of エラー番号.h 定数。
この非互換性を回避するために、perl は WSAE* エラー コードを E* 値にマップするようになりました。
可能であり、それらの値を $! に割り当てます。 Errno および POSIX によってエクスポートされる E* 定数
$! をテストするように更新されます。 彼らに対して、以前に可能な限り、
期待どおりに動作し続け、すべての E* 定数が エラー番号.h からエクスポートされるようになりました
オリジナルのモジュール エラー番号.h 値。
WSAE* 値を $! に代入する既存の Perl コードの破損を避けるために、perl
割り当てをインターセプトし、使用するのと同じ E* 値へのマッピングを実行するようになりました
$! に割り当てるときに内部的に自体。
ただし、XNUMX つの後方非互換性が残っています: $! を比較する既存の Perl コードです。
以前に $! に割り当てられた WSAE* エラー コードの数値に対して
対応する E* 値が割り当てられている場合に壊れるようになりました
代わりは。 これは、E* 値が 100 未満の場合にのみ問題になります。
Errno と POSIX のオリジナル エラー番号.h ため、使用できませんでした。
WSAE* エラー コード テスト (たとえば、WSAEINVAL は 10022 ですが、対応する EINVAL は 22 です)。 (E*
100 を超える値が存在する場合は、とにかく WSAE* 値に再定義されているため、互換性は維持できます。
この変更の前後で機能する E* 定数を使用して達成されます。
内部では異なる数値を使用していますが。)
機能 "PerlIO_vsprintf" "PerlIO_sprintf" 持ってる き 削除
ドキュメント化されておらず、CPAN で使用されておらず、問題のあるこれら XNUMX つの関数は削除されました。
非推奨
当学校区の "/\C/" 文字 class
"/\C/" 正規表現文字クラスは非推奨です。 perl 5.22 以降では
警告を生成し、perl 5.24 以降では正規表現になります。
コンパイラ エラー。 UTF8 でエンコードされたファイルを構成する個々のバイトを調べる必要がある場合は、
最初に文字列 (またはコピー) に対して "utf8::encode()" を使用します。
リテラル コントロール 文字 in 変数 名
この非推奨は、$\cT などに影響します。ここで、\cT はリテラル コントロール ("NAK" など) です。
または "NEGATIVE ACKNOWLEDGE" 文字) をソース コードに含めます。 驚くべきことに、
もともとこれは、$^T のような変数にアクセスする標準的な方法として意図されていました。
キャレット形式は代替としてのみ追加されています。
リテラル コントロール フォームは、主に XNUMX つの理由で廃止されています。 それは可能性が高いものを持っています
$\cI が $^I のエイリアスとして機能しないなどの修正不可能なバグ、およびそれらの使用法が正しくない
非 ASCII プラットフォームへの移植性: $^T はどこでも機能しますが、\cT は空白文字です。
EBCDIC。 [パール#119123]
参考情報 〜へ 非整数 非陽性 整数 in $/
$/ をゼロへの参照または負の整数への参照に設定することは非推奨になりました。
そして振る舞います 正確に あたかも「undef」に設定されたかのように。 丸呑み動作を設定したい場合
$/ 明示的に「元に戻す」。
$/ を非整数への参照に設定することは現在禁止されており、エラーがスローされます。 パール
このコンテキストで何が起こるかを文書化したことはありません。
$/ を参照のアドレスに設定するのと同じように、将来的には異なる動作をする可能性があります。
そのため、この使用を禁止しています。
人格 マッチング ルーチン in POSIX
「POSIX」モジュールでのこれらの関数の使用は非推奨になりました: 「isalnum」、
"isalpha", "iscntrl", "isdigit", "isgraph", "islower", "isprint", "ispunct", "isspace",
「isupper」と「isxdigit」です。 関数にはバグがあり、UTF-8 エンコードでは機能しません
文字列。 詳細については、POSIX のエントリを参照してください。
コード内の各場所からそれらのいずれかを最初に呼び出すと、警告が発生します。
呼ばれます。 (したがって、ループ内でステートメントが繰り返されると、警告が XNUMX つだけ発生します。)
通訳者ベース スレッド 今 落胆した
Perl が提供する「インタプリタベースのスレッド」は、高速で軽量なシステムではありません。
期待または期待できるマルチタスク。 スレッドは次の方法で実装されます。
誤用しやすくします。 それらを正しく使用する方法を知っている、または使用できる人はほとんどいません
ヘルプを提供します。
perl でのインタプリタベースのスレッドの使用は、公式には推奨されていません。
モジュール 除去
次のモジュールは、将来のリリースでコアディストリビューションから削除されます。
その時点でCPANからインストールする必要があります。 を必要とするCPANでの配布
これらのモジュールは、それらを前提条件としてリストする必要があります。
これらのモジュールのコアバージョンは、「非推奨」カテゴリの警告を発行して警告します。
この事実にあなた。 これらの非推奨の警告を消すには、問題のモジュールをインストールしてください
CPAN から。
これらのモジュールのコアからの計画的な削除は、判断を反映していないことに注意してください
コードの品質に関するものであり、それらの使用が適切であるという提案として解釈されるべきではありません。
停止しました。 コアからの除外は、主にブートストラップの必要性にかかっています
完全に機能し、CPAN 対応の Perl インストールであり、設計に関する懸念はありません。
CGI とそれに関連する CGI:: パッケージ
inc::最新
パッケージ::定数
Module::Build とそれに関連する Module::Build:: パッケージ
ユーティリティ 除去
次のユーティリティは、将来のリリースでコア ディストリビューションから削除されます。
その時点で CPAN からインストールする必要があります。
find2perl
s2p
a2p
パフォーマンス 機能強化
· Perl には新しいコピー オン ライト メカニズムがあり、内部をコピーする必要がありません。
あるスカラーから別のスカラーに代入するときの文字列バッファー。 これにより、コピーが大きくなります
文字列ははるかに速く表示されます。 の後に XNUMX つ (またはそれ以上) の文字列の XNUMX つを変更する
割り当ては、内部的にコピーを強制します。 これにより、文字列を渡す必要がなくなります
効率の参考に。
この機能は 5.18.0 で既に利用可能でしたが、デフォルトでは有効になっていませんでした。 それは
デフォルトになったので、perl をビルドする必要はもうありません。 構成 引数:
-Accflags =-DPERL_NEW_COPY_ON_WRITE
次のように perl ビルドで (今のところ) 無効にすることができます:
-Accflags=-DPERL_NO_COW
一部のオペレーティング システムでは、Perl をコンパイルしようとすると、
複数の SV で共有されている文字列バッファを変更すると、クラッシュします。 この方法で XS 作成者はテストできます
それらのモジュールがコピー オン ライト スカラーを正しく処理すること。 の「コピー オン ライト」を参照してください。
詳細については perlguts を参照してください。
· Perl には、正規表現パターンのオプティマイザがあります。 パターンを分析して、
文字列が一致する必要がある最小の長さなどを見つけます。
Latin1 の範囲を超えるコード ポイントをより適切に処理します。
· "^" アンカー (または "/m" フラグの下のそのバリアント) を含む正規表現を実行する
いくつかの状況ではるかに高速になりました。
· 事前計算されたハッシュ値は、メソッド ルックアップ中により多くの場所で使用されるようになりました。
· 一定のハッシュ キー ルックアップ ($hash{$key} ではなく $hash{key}) は長い間、
検索を高速化するために、コンパイル時に計算される内部ハッシュ値。 この最適化
ハッシュスライスにも適用されるようになりました。
· 「および」と「または」を組み合わせた演算子を無効なコンテキストで使用する。
($a && $b)" および "if ($a || b)" は、ステートメントの最後に直接短絡するようになりました。
[perl#120128]
· 特定の状況で、"return" がサブルーチンのメインの最後のステートメントである場合
範囲、それは最適化されます。 これは、次のようなコードを意味します。
サブバズ{リターン$猫; }
次のように動作します。
サブバズ { $cat; }
これは著しく高速です。
[perl#120765]
· 次のようなコード:
私の $x; # または @x、%x
私の$y;
は次のように最適化されています。
私 ($x, $y);
v5.18.0 で導入された padrange 最適化と組み合わせると、これはより長くなることを意味します。
初期化されていない私の変数ステートメントも最適化されるため、次のようになります。
私の $x; 私の@y; 私の %z;
になります:
私 ($x、@y、%z);
[perl#121077]
· 配列やハッシュ スライスを含む特定の種類のリストの作成は、現在では
もっと早く。
· 小さな定数整数でインデックス付けされた配列の最適化が適用されるようになりました
128..127 ではなく、-0..255 の範囲の整数。 これにより、Perl コードが高速化されるはずです
$x[-1] のような式を使用しますが、(おそらくはるかにまれな) コードを使用して
$x[200] のような式。
· 大きなハッシュ (「キー」または「各」を使用) に対する最初の反復が高速になりました。 これは
遅延ではなく、ハッシュの内部反復子状態を事前に割り当てることによって達成されます
ハッシュが最初に繰り返されるときに作成します。 (小さなハッシュの場合、イテレータはそのままです
最初に必要になったときにのみ作成されます。 ハッシュが小さいほど、
オブジェクトとして使用されるため、割り当てられることはありません。 大きなハッシュの場合、それは少なくなります
真である可能性が高く、イテレータを割り当てるコストは、
ハッシュ自体にスペースを割り当てます。)
· 「readline」または「<>」から来た文字列に対してグローバル正規表現マッチを行う場合
オペレーターによって、データが不必要にコピーされることはなくなりました。 [パール#121259]
· $obj が
オーバーロードされたメソッドを持つが、いずれのメソッドもオーバーロードしないクラスのインスタンス
メソッド「@{}」、「%{}」などの逆参照。
· Perl のオプティマイザは、特定の「eval {}」に続くコードの最適化をスキップしなくなりました
式(明らかな無限ループを含む)。
· 実行時の無意味な作業を回避するために、実装がより適切に機能するようになりました。
内部効果のない「null」操作 (Perl の構文解析の副作用として作成)
プログラム) は通常、コンパイル中に削除されます。 その削除は現在適用されています
以前は処理されなかったいくつかの状況。
· Perl は、最大で Unicode プロパティを扱うときのディスク I/O を少なくします。
連続するコード ポイントの XNUMX つの範囲。
モジュール プラグマタ
New モジュール プラグマタ
· 実験的な 0.007 が Perl コアに追加されました。
· IO::Socket::IP 0.29 が Perl コアに追加されました。
更新中 モジュール プラグマタ
· Archive::Tar がバージョン 1.90 から 1.96 にアップグレードされました。
· arybase がバージョン 0.06 から 0.07 にアップグレードされました。
· Attribute::Handlers がバージョン 0.94 から 0.96 にアップグレードされました。
· 属性がバージョン 0.21 から 0.22 にアップグレードされました。
· autodie がバージョン 2.13 から 2.23 にアップグレードされました。
· AutoLoader がバージョン 5.73 から 5.74 にアップグレードされました。
· autouse がバージョン 1.07 から 1.08 にアップグレードされました。
・Bはバージョン1.42から1.48にバージョンアップしました。
· B::Concise がバージョン 0.95 から 0.992 にアップグレードされました。
· B::Debug がバージョン 1.18 から 1.19 にアップグレードされました。
· B::Deparse がバージョン 1.20 から 1.26 にアップグレードされました。
・ベースがバージョン2.18から2.22にバージョンアップしました。
· Benchmark がバージョン 1.15 から 1.18 にアップグレードされました。
· bignum がバージョン 0.33 から 0.37 にアップグレードされました。
· Carp がバージョン 1.29 から 1.3301 にアップグレードされました。
· CGI がバージョン 3.63 から 3.65 にアップグレードされました。 注: CGI は推奨されておらず、
Perl の将来のバージョンから削除されます。
· charnames がバージョン 1.36 から 1.40 にアップグレードされました。
· Class::Struct がバージョン 0.64 から 0.65 にアップグレードされました。
· Compress::Raw::Bzip2 がバージョン 2.060 から 2.064 にアップグレードされました。
· Compress::Raw::Zlib がバージョン 2.060 から 2.065 にアップグレードされました。
· Config::Perl::V がバージョン 0.17 から 0.20 にアップグレードされました。
・定数がバージョン1.27から1.31にバージョンアップしました。
· CPAN がバージョン 2.00 から 2.05 にアップグレードされました。
· CPAN::Meta はバージョン 2.120921 から 2.140640 にアップグレードされました。
· CPAN::Meta::Requirements がバージョン 2.122 から 2.125 にアップグレードされました。
· CPAN::Meta::YAML がバージョン 0.008 から 0.012 にアップグレードされました。
· Data::Dumper がバージョン 2.145 から 2.151 にアップグレードされました。
・DBがバージョン1.04から1.07にバージョンアップしました。
· DB_File がバージョン 1.827 から 1.831 にアップグレードされました。
· DBM_Filter がバージョン 0.05 から 0.06 にアップグレードされました。
· deprecate がバージョン 0.02 から 0.03 にアップグレードされました。
· Devel::Peek がバージョン 1.11 から 1.16 にアップグレードされました。
· Devel::PPPort がバージョン 3.20 から 3.21 にアップグレードされました。
· 診断がバージョン 1.31 から 1.34 にアップグレードされました。
· Digest::MD5 がバージョン 2.52 から 2.53 にアップグレードされました。
· Digest::SHA がバージョン 5.84 から 5.88 にアップグレードされました。
· DynaLoader がバージョン 1.18 から 1.25 にアップグレードされました。
· Encode がバージョン 2.49 から 2.60 にアップグレードされました。
· エンコーディングがバージョン 2.6_01 から 2.12 にアップグレードされました。
・英語版を1.06から1.09にバージョンアップしました。
$OLD_PERL_VERSION が $] のエイリアスとして追加されました。
・Errnoがバージョン1.18から1.20_03にバージョンアップしました。
· Exporter がバージョン 5.68 から 5.70 にアップグレードされました。
· ExtUtils::CBuilder がバージョン 0.280210 から 0.280216 にアップグレードされました。
· ExtUtils::Command がバージョン 1.17 から 1.18 にアップグレードされました。
· ExtUtils::Embed がバージョン 1.30 から 1.32 にアップグレードされました。
· ExtUtils::Install がバージョン 1.59 から 1.67 にアップグレードされました。
· ExtUtils::MakeMaker がバージョン 6.66 から 6.98 にアップグレードされました。
· ExtUtils::Miniperl がバージョンから 1.01 にアップグレードされました。
· ExtUtils::ParseXS がバージョン 3.18 から 3.24 にアップグレードされました。
· ExtUtils::Typemaps がバージョン 3.19 から 3.24 にアップグレードされました。
· ExtUtils::XSSymSet がバージョン 1.2 から 1.3 にアップグレードされました。
・機能がバージョン 1.32 から 1.36 にアップグレードされました。
· fields がバージョン 2.16 から 2.17 にアップグレードされました。
· File::Basename がバージョン 2.84 から 2.85 にアップグレードされました。
· File::Copy がバージョン 2.26 から 2.29 にアップグレードされました。
· File::DosGlob がバージョン 1.10 から 1.12 にアップグレードされました。
· File::Fetch がバージョン 0.38 から 0.48 にアップグレードされました。
· File::Find がバージョン 1.23 から 1.27 にアップグレードされました。
· File::Glob がバージョン 1.20 から 1.23 にアップグレードされました。
· File::Spec がバージョン 3.40 から 3.47 にアップグレードされました。
· File::Temp がバージョン 0.23 から 0.2304 にアップグレードされました。
· FileCache がバージョン 1.08 から 1.09 にアップグレードされました。
· Filter::Simple がバージョン 0.89 から 0.91 にアップグレードされました。
· Filter::Util::Call がバージョン 1.45 から 1.49 にアップグレードされました。
· Getopt::Long がバージョン 2.39 から 2.42 にアップグレードされました。
· Getopt::Std がバージョン 1.07 から 1.10 にアップグレードされました。
· Hash::Util::FieldHash がバージョン 1.10 から 1.15 にアップグレードされました。
· HTTP::Tiny がバージョン 0.025 から 0.043 にアップグレードされました。
· I18N::Langinfo がバージョン 0.10 から 0.11 にアップグレードされました。
· I18N::LangTags がバージョン 0.39 から 0.40 にアップグレードされました。
· バージョン 0.0602 から 0.0603 にアップグレードされた場合。
· inc::latest がバージョン 0.4003 から 0.4205 にアップグレードされました。 注: inc::latest は
非推奨であり、Perl の将来のバージョンから削除される可能性があります。
· integer がバージョン 1.00 から 1.01 にアップグレードされました。
· IO がバージョン 1.28 から 1.31 にアップグレードされました。
· IO::Compress::Gzip とその仲間がバージョン 2.060 から 2.064 にアップグレードされました。
· IPC::Cmd がバージョン 0.80 から 0.92 にアップグレードされました。
· IPC::Open3 がバージョン 1.13 から 1.16 にアップグレードされました。
· IPC::SysV がバージョン 2.03 から 2.04 にアップグレードされました。
· JSON::PP がバージョン 2.27202 から 2.27203 にアップグレードされました。
· List::Util がバージョン 1.27 から 1.38 にアップグレードされました。
· ロケールがバージョン 1.02 から 1.03 にアップグレードされました。
· Locale::Codes がバージョン 3.25 から 3.30 にアップグレードされました。
· Locale::Maketext がバージョン 1.23 から 1.25 にアップグレードされました。
· Math::BigInt がバージョン 1.9991 から 1.9993 にアップグレードされました。
· Math::BigInt::FastCalc がバージョン 0.30 から 0.31 にアップグレードされました。
· Math::BigRat がバージョン 0.2604 から 0.2606 にアップグレードされました。
· MIME::Base64 がバージョン 3.13 から 3.14 にアップグレードされました。
· Module::Build がバージョン 0.4003 から 0.4205 にアップグレードされました。 注: Module::Build は
非推奨であり、Perl の将来のバージョンから削除される可能性があります。
・module::CoreListがバージョン2.89から3.10にアップグレードされました。
· Module::Load がバージョン 0.24 から 0.32 にアップグレードされました。
· Module::Load::Conditional がバージョン 0.54 から 0.62 にアップグレードされました。
· Module::Metadata がバージョン 1.000011 から 1.000019 にアップグレードされました。
· mro がバージョン 1.11 から 1.16 にアップグレードされました。
· Net::Ping がバージョン 2.41 から 2.43 にアップグレードされました。
· オペコードがバージョン 1.25 から 1.27 にアップグレードされました。
· Package::Constants がバージョン 0.02 から 0.04 にアップグレードされました。 ノート:
Package::Constants は推奨されておらず、Perl の将来のバージョンから削除される可能性があります。
· Params::Check がバージョン 0.36 から 0.38 にアップグレードされました。
· 親がバージョン 0.225 から 0.228 にアップグレードされました。
· Parse::CPAN::Meta がバージョン 1.4404 から 1.4414 にアップグレードされました。
· Perl::OSType がバージョン 1.003 から 1.007 にアップグレードされました。
· perlfaq がバージョン 5.0150042 から 5.0150044 にアップグレードされました。
· PerlIO がバージョン 1.07 から 1.09 にアップグレードされました。
· PerlIO::encoding がバージョン 0.16 から 0.18 にアップグレードされました。
・PerlIO::scalarがバージョン0.16から0.18にアップグレードされました。
· PerlIO::via がバージョン 0.12 から 0.14 にアップグレードされました。
· Pod::Escapes がバージョン 1.04 から 1.06 にアップグレードされました。
· Pod::Functions がバージョン 1.06 から 1.08 にアップグレードされました。
· Pod::Html がバージョン 1.18 から 1.21 にアップグレードされました。
· Pod::Parser がバージョン 1.60 から 1.62 にアップグレードされました。
· Pod::Perldoc がバージョン 3.19 から 3.23 にアップグレードされました。
· Pod::Usage がバージョン 1.61 から 1.63 にアップグレードされました。
・POSIXがバージョン1.32から1.38_03にアップグレードされました。
· re はバージョン 0.23 から 0.26 にアップグレードされました。
· Safe がバージョン 2.35 から 2.37 にアップグレードされました。
· Scalar::Util がバージョン 1.27 から 1.38 にアップグレードされました。
· SDBM_File がバージョン 1.09 から 1.11 にアップグレードされました。
· ソケットがバージョン 2.009 から 2.013 にアップグレードされました。
・Storableがバージョン2.41から2.49にバージョンアップしました。
· strict がバージョン 1.07 から 1.08 にアップグレードされました。
· subs がバージョン 1.01 から 1.02 にアップグレードされました。
· Sys::Hostname がバージョン 1.17 から 1.18 にアップグレードされました。
· Sys::Syslog がバージョン 0.32 から 0.33 にアップグレードされました。
· Term::Cap がバージョン 1.13 から 1.15 にアップグレードされました。
· Term::ReadLine がバージョン 1.12 から 1.14 にアップグレードされました。
· Test::Harness がバージョン 3.26 から 3.30 にアップグレードされました。
· Test::Simple がバージョン 0.98 から 1.001002 にアップグレードされました。
· Text::ParseWords がバージョン 3.28 から 3.29 にアップグレードされました。
· Text::Tabs がバージョン 2012.0818 から 2013.0523 にアップグレードされました。
· Text::Wrap がバージョン 2012.0818 から 2013.0523 にアップグレードされました。
・Threadがバージョン3.02から3.04にバージョンアップしました。
· Thread::Queue がバージョン 3.02 から 3.05 にアップグレードされました。
· スレッドがバージョン 1.86 から 1.93 にアップグレードされました。
· threads::shared がバージョン 1.43 から 1.46 にアップグレードされました。
· Tie::Array がバージョン 1.05 から 1.06 にアップグレードされました。
· Tie::File がバージョン 0.99 から 1.00 にアップグレードされました。
· Tie::Hash がバージョン 1.04 から 1.05 にアップグレードされました。
· Tie::Scalar がバージョン 1.02 から 1.03 にアップグレードされました。
· Tie::StdHandle がバージョン 4.3 から 4.4 にアップグレードされました。
· Time::HiRes がバージョン 1.9725 から 1.9726 にアップグレードされました。
· Time::Piece がバージョン 1.20_01 から 1.27 にアップグレードされました。
· Unicode::Collate がバージョン 0.97 から 1.04 にアップグレードされました。
· Unicode::Normalize がバージョン 1.16 から 1.17 にアップグレードされました。
· Unicode::UCD がバージョン 0.51 から 0.57 にアップグレードされました。
· utf8 がバージョン 1.10 から 1.13 にアップグレードされました。
・バージョンが0.9902から0.9908にバージョンアップしました。
· vmsish がバージョン 1.03 から 1.04 にアップグレードされました。
・警告がバージョン1.18から1.23にアップグレードされました。
・Win32がバージョン0.47から0.49にアップグレードされました。
· XS::Typemap がバージョン 0.10 から 0.13 にアップグレードされました。
· XSLoader がバージョン 0.16 から 0.17 にアップグレードされました。
ドキュメント
New ドキュメント
perlリポジトリ
このドキュメントは Perl で削除されました (実際には、perlgit に名前が変更され、大幅なオーバーホールが行われました)。
v5.14。Perl のドキュメント Web サイトで、Perl の古いバージョンが表示される
v5.12 が最新バージョンです。 現在はスタブ形式で復元されており、読者は
現在の情報。
変更 〜へ 現行製品 ドキュメント
パールデータ
· 新しいインデックス/値配列スライスとキー/値を文書化するために、新しいセクションが追加されました
ハッシュ スライス構文。
パールデブガッツ
· 「DB::goto」および「DB::lsub」デバッガー サブルーチンが文書化されました。 [パール #77680]
パール実験
· "\cK" に一致する "\s" は実験的とマークされています。
· ithreads は v5.8.0 で受け入れられました (ただし、v5.20.0 では非推奨です)。
· long double は実験的とは見なされません。
· 正規表現、正規表現バックトラッキング動詞、左辺値のコード
サブルーチンは実験的なものとしてリストされなくなりました。 (これは perlre と
パールサブ)
ペルファンク
· "chop" と "chomp" は、ハッシュ イテレータをリセットできることに注意してください。
· "exec" の引数の処理がより明確に文書化されました。
· "eval EXPR" には、一部のロケールでの浮動小数点数の展開に関する警告が追加されました。
· "goto EXPR" は、コードに評価される式を処理するために文書化されました
「goto &$coderef」であるかのように参照します。 この動作は少なくとも XNUMX 年前のものです。
· Perl v5.10 以降、@INC のサブルーチンが参照を返すことが可能になりました。
ファイルの先頭に追加する初期ソース コードを保持するスカラーに変換します。 これが今
文書化されています。
· "ref" のドキュメントが更新され、"blessed"、"isa" の使用が推奨されました。
祝福されたオブジェクトへの参照を扱うときの「reftype」。
ペルガット
· perl の内部に加えられた変更を反映するために、多数のマイナーな変更が加えられました。
このリリース。
· 読み取り専用値とコピー オン ライトに関する新しいセクションが追加されました。
パーラック
· スーパー クイック パッチ ガイドのセクションが更新されました。
perlhackのヒント
· ドキュメントが更新され、"gdb" の使用例がいくつか追加されました。
ペルレックスワーン
· 警告カテゴリの階層を説明するために使用される perllexwarn ドキュメント
warnings プラグマによって理解されます。 その説明は警告に移動されました
ドキュメンテーション自体を削除し、それを指すスタブとして perllexwarn を残します。 この変更
字句警告に関するすべてのドキュメントを XNUMX か所に統合します。
ペルロケール
· ドキュメントに次のように記載されています FC() および "\F" であり、多くの説明と
修正全般。
パーロップ
· Perl の言語設計では、常に単相演算子が必要でした。 これが今
明示的に言及。
パーロペントゥット
· 「オープン」チュートリアルは、Tom Christiansen によって完全に書き直されました。
すべての包括的なリファレンスを提供するのではなく、基本のみをカバーすることについて
開閉可能なもの。 この書き直しは、
perl5-porters は Alexander Hartmaier によって書かれた一連の改良によって開始されました。
既存の perlopentut。 「「オープン」についてもっと知りたい」ドキュメント
以降のバージョンの perl で続く可能性があります。
ペルレ
· 正規表現エンジンが (?{}) および (??{}) 構造を呼び出そうとしないという事実
任意の指定回数 (ただし、成功した場合は基本的に DWIM になります)
一致) が文書化されています。
· "/r" 修飾子 (非破壊置換用) が文書化されました。 [パール#119151]
· "/x" および "(?# コメント)" のドキュメントが拡張され、明確になりました。
パールレガッツ
· ドキュメントは最近の変更に照らして更新されました regcomp.c.
パールサブ
· プロトタイプの順序で再帰関数をプロトタイプで事前宣言する必要性
再帰呼び出しで尊重されることが文書化されました。 [パール#2726]
· perl 実装で使用されるサブルーチン名のリストが含まれるようになりました。 [パール
#77680]
パールトラップ
· JavaScript セクションが追加されました。
ペルルニコード
· ドキュメントは、Unicode 6.3 での "Bidi_Class" の変更を反映するように更新されました。
パールバー
· $`、$&、および $' のパフォーマンスの問題を説明する新しいセクション。
異なるバージョンの Perl での回避策と変更点が追加されました。
· 長い間文書化されてきたが実際には存在しない XNUMX つの英語の変数名
ドキュメントから削除されました。 これらは、$OLD_PERL_VERSION、$OFMT、および
$ARRAY_BASE。
(実際には、「OLD_PERL_VERSION」 ありません この改訂以降、存在しますが、残りました
perl 5.22.0 までは文書化されていません。)
ペルクス
· "MY_CXT" の例のいくつかの問題が修正されました。
診断法
警告を含め、診断出力に次の追加または変更が加えられました。
致命的なエラーメッセージ。 診断メッセージの完全なリストについては、perldiagを参照してください。
New 診断法
New Errors
· delete 引数はインデックス/値の配列スライス、配列スライスを使用
(F)「削除」の引数としてインデックス/値配列スライス構文(%array [...])を使用しました。
おそらく、代わりに@記号が付いた@array[...]を意味します。
· delete 引数はキー/値のハッシュ スライス、ハッシュ スライスを使用
(F)「削除」の引数としてキー/値ハッシュスライス構文(%hash {...})を使用しました。
おそらく、代わりに@記号が付いた@hash{...}を意味します。
· 魔法のリスト定数はサポートされていません
(F)stash要素に魔法の配列を割り当ててから、
同じスロットからのサブルーチン。 あなたはPerlにできないことをするように頼んでいます、
詳細はPerlバージョン間で変更される可能性があります。
· $/ を %s 参照に設定することは禁止されています
New 警告
· リファレンスの %s は実験的なものです:
「auto-deref」機能は実験的なものです。
v5.14.0 から、プッシュ、ポップ、キー、およびその他のビルトインを使用できました。
集約型だけでなく、それらへの参照にも機能します。 機能はありませんでした
元の意図された仕様に展開され、現在は冗長になる可能性があります
後置デリファレンス。 これは常に実験的な機能として分類されてきました。
v5.20.0 では、そのような警告が表示されます。
これらの操作が検出されると、コンパイル時に警告が発行されるようになりました。
no if $] >= 5.01908, warnings => "experimental::autoderef";
ただし、動作が変わる可能性があるため、これらの機能の使用を置き換えることを検討してください
安定する前にもう一度。
· charnames エイリアス定義での複数のスペースのシーケンスは非推奨です
charnames エイリアス定義の末尾の空白は非推奨です
「\N{...}」に関連するこれら XNUMX つの非推奨警告は、誤って実装されていました。 彼ら
デフォルトでは警告を発しませんでした (現在は警告を発しています)。
FATAL => '非推奨'" (現在は可能です)。
· 属性プロトタイプ (%s) は、同じサブ内の以前のプロトタイプ属性を破棄します
(W misc) サブルーチンが「サブ foo : プロトタイプ(A) : プロトタイプ(B) {}」として宣言されました。
例。 各サブはプロトタイプを XNUMX つしか持つことができないため、以前の宣言は
最後のものが適用されている間に破棄されます。
· %s の %s に無効な \0 文字があります: %s\0%s
(W syscalls)パス名または他のシステムコール引数に埋め込まれた\0文字
5.20の時点で警告を生成します。 \ 0の後の部分は、以前はシステムによって無視されていました
呼び出します。
· 非 Unicode コード ポイント 0x%X を Unicode プロパティに対して一致させました。 携帯できないかもしれません。
これは、「コード ポイント 0x%X は Unicode ではありません。すべての \p{} の一致は失敗します。すべて
\P{} マッチは成功します。」
· %s のプロトタイプに ']' がありません: %s
(Willegalproto)グループ化は「[」で開始されましたが、「]」で終了することはありませんでした。
· 制御フロー演算子の優先順位の問題の可能性
(W構文)制御フロー演算子の混合に問題がある可能性があります
(例:「return」)および「or」のような優先順位の低い演算子。 検討:
sub {return$aまたは$b; }
これは次のように解析されます。
sub {($ aを返す)または$ b; }
これは事実上正しいです:
sub {return $ a; }
括弧または演算子の優先順位の高いバリアントを使用してください。
これは、次のような構成に対してもトリガーされる可能性があることに注意してください。
sub{1ダイスの場合; }
· 後置デリファレンスは実験的です
(Sexperimental :: postderef)この警告は、experimentalを使用した場合に発行されます
接尾辞の間接参照構文。 を使用したい場合は、単に警告を抑制してください
機能ですが、そうすることで、実験的なものを使用するリスクを冒していることを知ってください
将来のPerlバージョンで変更または削除される可能性のある機能:
警告なし"experimental:: postderef";
機能「postderef」、「postderef_qq」を使用します。
$ ref-> $ *;
$ aref-> @ *;
$ aref-> @ [@ indices];
...など..。
· プロトタイプ '%s' は %s の属性 'prototype(%s)' によって上書きされました
(Wプロトタイプ)プロトタイプは、サブ名と
プロトタイプ属性を介して。 括弧内のプロトタイプは役に立たないので、
使用される前に、属性のプロトタイプに置き換えられます。
· スカラー値 @%s[%s] は $%s[%s] と記述したほうがよい
(W構文)スカラーコンテキストでは、配列インデックス/値スライス(%で示される)を使用しました
配列の単一の要素を選択します。 一般的に、スカラーを要求する方が良いです
値($で示されます)。 違いは、$ foo [&bar]は常に
スカラー、それが返す値とその引数を評価するときの両方で、
%foo [&bar]は、添え字にリストコンテキストを提供します。これは、次の場合に奇妙なことを行う可能性があります。
添え字はXNUMXつだけです。 リストコンテキストで呼び出されると、
値に加えてインデックス(&barが返すもの)。
· スカラー値 @%s{%s} は $%s{%s} と書くほうがよい
(W構文)スカラーコンテキストでは、ハッシュキー/値スライス(%で示される)を使用して
ハッシュの単一の要素を選択します。 一般的に、スカラー値を要求する方が良いです
($で示されます)。 違いは、$ foo {&bar}は常にスカラーのように動作することです。
返す値と引数を評価するときの両方で、@ foo {&bar}と
下付き文字にリストコンテキストを提供します。これは、次の場合に奇妙なことを行う可能性があります
下付き文字はXNUMXつだけです。 リストコンテキストで呼び出されると、次のキーも返します。
値に加えて。
· slurp の形式として $/ を %s への参照に設定することは非推奨であり、undef として扱われます
· 予期しない終了 %u
(S) 出口() 呼び出されたか、スクリプトが正常に終了した場合
「PL_exit_flags」に「PERL_EXIT_WARN」が設定されました。
· 予期しない終了エラー %d
(S)キャッチされていない 死にます() 「PL_exit_flags」に「PERL_EXIT_WARN」が設定されているときに呼び出されました。
· 変数名でのリテラル制御文字の使用は非推奨です
(D deprecated) ソースでリテラル制御文字を使用して ^FOO を参照する
$^X や ${^GLOBAL_PHASE} などの変数は非推奨になりました。 これはコードにのみ影響します
$\cT のように、\cT はソース コード内のコントロール ("SOH" のような) です: ${"\cT"} および $^T
有効のままです。
・貪欲修飾子の無駄使い
これは [Perl #42957] を修正します。
変更 〜へ 現行製品 診断法
· 正規表現エンジンからの警告とエラーが UTF-8 クリーンになりました。
· 「不明なスイッチ状態」エラー メッセージが若干変更されました。 このエラー
「(?(foo))」条件に不明な条件がある場合にトリガーされます。 エラー
メッセージの読み方:
不明なスイッチ条件 (?(正規表現の %s;
しかし、%s がどうなるかはほとんど運次第でした。 「(?(foobar))」については、見たことがあるかもしれません。
"fo" または "f"。 Unicode 文字の場合、通常、破損した文字列が表示されます。 の
メッセージは次のように変更されました。
正規表現の不明なスイッチ条件 (?(...))。
さらに、エラーの '<-- HERE' マーカーは、エラーの正しい場所を指すようになりました。
正規表現。
· "%s "\x%X" does not map to Unicode" 警告が重大として正しくリストされるようになりました
致命的なエラーではなく警告。
· まれに、「読み取り専用の REF を文字列に強制できません」というメッセージが表示されることがありました。
慣習的な「読み取り専用値の変更」の代わりに。 この代替エラー
メッセージが削除されました。
· 「あいまいな使用 * は演算子 * として解決されます」: "%" および "%" に関するこれと同様の警告
「&」は、引用されたタイプの演算子がない状況で発生していました。
したがって、警告は完全に間違っていました。 これは修正されました [perl #117535, #76910]。
· 不正なサブルーチン プロトタイプに関する警告は、
プロトタイプがレンダリングされます。 これらの警告の一部は、以下を含むプロトタイプを切り捨てます。
ヌル。 それ以外の場合、XNUMX つの警告が別の警告を抑制します。 違法に関する警告
プロトタイプの文字は、悪い文字が前に来た場合に「'_' の後」と表示されなくなりました
アンダースコア。
· 0x%X の Perl 折り畳みルールは最新ではありません。 perlbug ユーティリティを使用してください
報告; 正規表現で; <-- HERE in m/%s/ でマーク
このメッセージは現在、非推奨のカテゴリではなく、正規表現のカテゴリにのみ含まれています。
これは依然としてデフォルトの (つまり、深刻な) 警告です [perl #89648]。
· スカラー コンテキストの %%s[%s] は、$%s[%s] と記述したほうがよい
この警告は、スカラーであることがわかっている %array[$index] または %hash{key} に対して発生するようになりました
コンパイル時のコンテキスト。 以前は、「スカラー値 %%s[%s] より良い」という表現でした
$%s[%s] と書かれています。
· 正規表現で認識されないスイッチ条件。 <-- HERE in m/%s/: でマーク
この診断の説明は、
警告が出る場合があります。 矢印インジケータの配置に関する問題もありました
解決しました。
· "my($a?$b$c)" と "my(do{})" のエラー メッセージに "conditional
「null を宣言できません」を読む代わりに、それぞれ「式」と「do ブロック」
「私の」での操作。
· "use re "debug"" で後方参照を含む正規表現を実行すると、デバッグ
出力に、どの文字列が一致しているかが表示されるようになりました。
· 致命的なエラー メッセージ ""\c" に続く文字は ASCII でなければなりません" が書き直されました
「「\c」に続く文字は、印刷可能な ASCII でなければなりません」として、「\c」でそれを強調します。X", X
する必要があります 印刷可能な (非対照) アスキー文字。
ユーティリティ 変更
a2p
・開始前にアクセスしようとするとoff-by-oneエラーでクラッシュする可能性がある
のバッファが修正されました。 [パール#120244]
bisect.pl
git 二分ツール 移植/bisect.pl 多くの機能強化が行われました。
ソース配布の一部として提供されますが、そうでないためインストールされません。
git チェックアウト内からの実行に依存しているため、自己完結型です。 また、
テストを修正したり、実行時のバグを修正したり、インストールに役立つものを作成しようとはしません -
その目的は、最小限の変更を加えて、関心のある履歴リビジョンを構築することです。
可能な限り「現状のまま」に近づけて実行することで、「git bisect」を使いやすくします。
· オプションで、タイムアウトを指定してテスト ケースを実行できます。
· クリーンな git チェックアウトでその場で実行できるようになりました。
· "valgrind" でテスト ケースを実行できます。
· ビルド前にソース チェックアウトにユーザー提供のパッチと修正を適用できます。
· 現在は bleadperl の歴史的な範囲をいくつか構築できるように修正されています。
バグや動作の変更の原因を特定するのに役立ちます。
find2perl
· find2perl は "?" を処理するようになりました。 正しくワイルドカード。 [パール #113054]
パールバグ
· パールバグ バグレポートにパッチを添付するための「-p」オプションが追加されました。
· perlbug は、レポート テンプレートに CRLF 行末を提供するように変更されました。
ウィンドウズ。 [パール#121277 ]
· perlbug は、レポートのエンコーディングに関して可能な限り少ない仮定を行うようになりました。
これは将来、デフォルトで UTF-8 を想定するように変更される可能性がありますが、ユーザーは許可されます。
オーバーライド。
編集
・ メイクファイル.PL SDBM_File の生成が改善されました メークファイル、レースを回避します
ビルドが失敗する可能性があります。 これは
最後の既知の並列 make 問題 (*nix プラットフォーム上) であるため、
parallel make で常にエラーが発生しないようになりました。
· インストールperl インストールマンのオプション処理は、Getopt::Long を使用するようにリファクタリングされました。
どちらも メークファイル 「インストール」対象であり、インストールされていないため、これら
変更は、カスタム インストール スクリプトにのみ影響する可能性があります。
· XNUMX 文字のオプションにも長い名前が付けられるようになりました。
· 無効なオプションは拒否されるようになりました。
· オプションではないコマンド ライン引数は拒否されるようになりました。
· それぞれに、使用法メッセージを表示する「--help」オプションが追加されました。
文書化されているすべての有効な呼び出しの動作は変更されていません。
· 可能であれば、ビルドは再帰呼び出しを回避するようになりました make 純粋なビルド時
ビルドから並列処理を削除することなく、Perl 拡張機能。 現在80前後
拡張機能は、 make_ext.pl ツール、つまり 80
の呼び出し make および 160 回の呼び出し ミニパール 作られなくなりました。
· ビルド システムは、GCC または Clang でリンク時にコンパイルするときに正しく機能するようになりました。
最適化が有効になっています (「-flto」オプション)。 [パール#113022]
· "d_libname_unique" を使用した個別のライブラリ ベース名。
このオプションを指定して perl をコンパイルすると、XS モジュールのライブラリ ファイルの名前が
「ユニーク」なもの -- たとえば、Hash/Util/Util.so は次のようになります。
Hash/Util/PL_Hash__Util.so. この動作は、現在発生しているものと似ています
VMS であり、Android ポートの土台として機能します。
· gcc および clang の下の論理ルート ディレクトリを示す「sysroot」オプション。
このオプション セットを使用してビルドする場合、Configure とコンパイラの両方がすべてを検索します。
代わりに、この新しい sysroot の下のヘッダーとライブラリ /.
これは、クロスコンパイルの場合は大幅な時間の節約になりますが、ネイティブ ビルドでも役立つ場合があります。
ツールチェーンのファイルに標準以外の場所があります。
・クロスコンパイルモデルを一新。 いくつかの新しいオプションがあります。
下位互換性のない変更:
ホストで使用される miniperl と generate_uudmap のバイナリをビルドするようになりました。
ターゲットですべての miniperl 呼び出しを実行するよりも。 これは、'make test' を除いて、
構成が完了すると、ターゲット システムにアクセスする必要がなくなります。 あなたが提供することができます
「hostperl」および「hostgenerate」オプションを使用して構成済みのビルド済みバイナリ。
さらに、ASCII ホストから EBCDIC プラットフォームをターゲットにする場合、またはその逆の場合は、
「-Uhostgenerate」を指定して Configure を実行し、generate_uudmap が必要であることを示す必要があります
ターゲット上で実行されます。
最後に、ビルド直後に Configure を早期に終了させる方法もあります。
「ターゲットホスト」を指定せずにクロスコンパイルすることにより、ホストバイナリ。
互換性のない変更には、xconfig.h、xlib、または Cross.pm を使用しなくなったことが含まれます。
定型構成ファイルと Makefile を更新する必要があります。
· 上記に関連して、sh (または
同等) ターゲット システム: "targetsh"。
たとえば、Android の sh は /system/bin/sh にあるため、より多くの
sh を含む通常の Unix システム /bin/sh、「targetsh」は最終的に /system/bin/sh になり、
「sh」は /bin/sh です。
· デフォルトでは、 gccの 4.9 は、perl を破壊するいくつかの最適化を行います。 の -fwrapv オプション
これらの最適化 (およびおそらく他の最適化) を無効にします。 gccの 4.3 以降 (以降
古いバージョンでも同様の問題が潜んでいるかもしれませんが、 -fwrapv ました
4.3 より前に壊れており、最適化はおそらく消えません)、 構成 今追加します
-fwrapv ユーザーが要求しない限り -fno-wrapvを無効にします -fwrapvまたは
-fsanitize = undefined、オーバーフローを回します -fwrapv 実行時エラーを無視します。
[パール#121505 ]
テスト
· 「test.valgrind」make ターゲットにより、テストを並行して実行できるようになりました。 このターゲット
特定の種類の C を検出する Valgrind で Perl のテスト スイートを実行できるようにします。
実行時間にかなりのコストがかかりますが、プログラミングエラー。 適切なハードウェアで、
並列実行を可能にすることで、その追加コストの多くを取り戻すことができます。 [パール#121431]
・各種試験中 t /移植/ perl のときにスキップされなくなりました .git ディレクトリは
perl ツリーの外にあり、$GIT_DIR によって指されます。 [perl #120505]
· ユーザーのインタラクティブ シェルが $PWD を保持している場合に、テスト スイートが失敗しなくなりました。
環境変数ですが、 /bin/sh テストの実行に使用されません。
Platform サポート
New プラットフォーム
Android
Perl は、Android 用にネイティブに、またはクロス コンパイルを介してビルドできるようになりました。
現在利用可能な 86 つのアーキテクチャすべて (ARM、MIPS、および xXNUMX) で、幅広い
バージョン。
ビットリグ
OpenBSD のフォークである Bitrig のコンパイル サポートが追加されました。
FreeMiNT
Atari ST システム用の無料のオープンソース OS である FreeMiNT のサポートが追加されました。
Atari が正式に採用したオリジナルの MiNT をベースにした後継モデル。
Synologyの
Synology は NAS ボックスをリーン Linux ディストリビューション (DSM) で比較的安価に出荷しています
CPU (Marvell Kirkwood mv6282 など - ARMv5tel または Freescale QorIQ P1022 ppc -
e500v2) は、ワークステーションや開発向けではありません。 これらのボックスは今ビルドする必要があります。 の
基本的な問題は、ツールの非標準的な場所です。
中止 プラットフォーム
「sfio」
「sfio」I/O システムのサポートに関連するコードが削除されました。
Perl 5.004 では、AT&T の Safe/Fast I/O である「sfio」のネイティブ API を使用するためのサポートが追加されました
図書館。 このコードはまだ v5.8.0 でビルドされていますが、多くの回帰テストが失敗しています。
しかし、v5.8.1 リリースの前にうっかり壊れていたため、機能していませんでした。
それ以降にリリースされたすべてのバージョンの Perl で。 XNUMX 年以上、バグは発生していません
これについて報告されているため、誰もこの機能を使用していないことは明らかです
まだある程度サポートされている Perl のバージョン。
AT&T 3b1
AT&T Unix PC としても知られる 3b1 (および同様の AT&T
7300)、削除されました。
DG / UX
DG/UX は、Data General が販売する Unix でした。 最後のリリースは 2001 年 XNUMX 月でした。
Data General 独自のハードウェアで実行されます。
EBCDIC
煙レポートの定期的なソースがない場合、ネイティブをサポートするためのコード
EBCDIC プラットフォームは、5.22.0 より前に perl から削除されます。
プラットフォーム固有 Notes
Cygwin
· 受信() 接続されたハンドルで、返された送信者アドレスに
たまたま作業バッファにあったものは何でも。 受信() 現在、回避策を使用しています
Win32に似ている 受信() ラッパーであり、空の文字列を返します 受信元(2)
指定されたアドレスの長さを変更しません。 [パール#118843]
· Cygwin 1.7.28 での cygwin.c のビルド エラーを修正しました。
テストは、「cygserver」が実行されていないときに発生するエラーを処理するようになりました。
GNU / Hurd
ビルドに BSD 互換ライブラリ「libbsd」は不要になりました。
Linux
ヒント ファイルは、「libgdbm」自体も必要な場合にのみ「libgdbm_compat」を検索するようになりました。
前者は後者なしでは決して役に立ちません。
実際に建物を防ぐことができます。
Mac OSの
ビルドシステムは、実行中のユーザーによって提供された「ld」設定を受け入れるようになりました 構成.
ミッドナイトBSD
"objformat" は MidnightBSD のバージョン 0.4-RELEASE から削除され、
以前のバージョンでは廃止されました。 これにより、ビルド環境が誤って
「elf」ではなく「a.out」用に構成されています。 これは修正されました。
混合エンディアン プラットフォーム
混合エンディアン プラットフォームでの「パック」および「アンパック」操作をサポートするコードは、
削除されました。 私たちは、Perl が混合エンディアンで構築することが長い間できなかったと信じています。
アーキテクチャ (PDP-11 など) に影響を与えるとは考えていません。
v5.18.0 をビルドできるプラットフォーム。
VMS
· perl の起動時に %ENV の人口を制御する "PERL_ENV_TABLES" 機能
Perl 5.16.0 で壊れていましたが、現在は修正されています。
· リモートのアクセス チェックをスキップする opendir(). [パール#121002]
· 「glob()」演算子によって返されたパス内の glob メタ文字のチェックは、
VMS ワイルドカード文字のチェックに置き換えられました。 これにより、
いくつかの単純なグロブ操作が
60 ~ 80% 高速化。
Win32
· Win32 での "rename" と "link" は $ を設定するようになりました! 必要に応じて、ENOSPC および EDQUOT に送信します。
[perl#119857]
· BUILD_STATIC および ALL_STATIC makefile オプションは、一部または (ほぼ) すべてをリンクするためのものです。
拡張機能を静的に (perl520.dll に、そして別の perl-static.exe にも)
MinGW ビルドでは壊れていました。 これは修正されました。
ALL_STATIC オプションも改善され、Encode と Win32 が含まれるようになりました。
拡張機能 (VC++ と MinGW ビルドの両方)。
· Visual C++ 2013 でのビルドのサポートが追加されました。 現在XNUMX台あります
テストの失敗の可能性 (perlwin32 の「Windows での Perl のテスト」を参照)。
うまくいけば、すぐに解決されます。
· インテル C++ コンパイラーを使用したビルドの実験的サポートが追加されました。 の
nmake makefile (win32/Makefile) と dmake makefile (win32/makefile.mk) は、
使用済み。 現時点では、「nmake テスト」に合格しません。 cpan/CGI/t/url.t.
· perlfunc で "kill" と負のシグナルを使用してプロセス ツリーを強制終了すると、壊れていました。
5.18.0 以降。 このバグでは、"kill" は負のシグナルに対して常に 0 を返しました。
有効な PID の場合でも、プロセスは終了しませんでした。 これは修正されました [perl
#121230]。
· Windows で perl をビルドするのにかかる時間が大幅に短縮されました (時間
の数を減らすことで、通常 30 ~ 40% の節約が見られます)。
通常は失敗し、「require()」ごとの I/O 呼び出し ( ミニパール.exe それだけ)。 [パール
#121119 ]
· 約 15 分間のアイドル スリープが実行中の「make test」から削除されました。
テストに使用されるタイムアウト モニターが一度キャンセルできなかったバグ。
テストが完了し、次のテストを実行する前に完全なタイムアウト期間が経過した
ファイル。 [パール#121395 ]
· 疑似フォークなしでビルドされた perl の場合 (疑似フォーク ビルドはこの影響を受けませんでした)
バグ)、"kill()" と負のシグナルでプロセス ツリーを強制終了すると、
戻り値を反転する「kill()」。 たとえば、「kill()」が 1 つのプロセスを強制終了した場合
tree PID の場合、0 ではなく 1 が返され、「kill()」が 2 無効に渡された場合
PID の場合、2 ではなく 0 が返されました。
プロセス ツリーの kill 機能が Win32 に実装されました。 現在は修正されています
文書化された動作に従ってください。 [パール#121230
】
· 64 ビット perl をビルドすると、初期化されていないメモリが読み込まれる ミニパール.exe、 中古
ビルド プロセス中に、4 GB になる可能性があります。 wperl.exe 作成中です。 これは持っています
修正されました。 (ご了承ください perl.exe それ自体は影響を受けませんでしたが、明らかに
wperl.exe 完全に壊れていただろう.) [perl #121471
】
· Perl でビルドできるようになりました gccの バージョン 4.8.1 からhttp://www.mingw.org>。 これ
の定義が間違っていたため、以前は壊れていました DllMain() perlのいずれかで
ソースファイル。 ついさっき gccの のバージョン 4 を使用すると、バージョンも影響を受けました。
w32api パッケージ。 のバージョン gccの から入手できる
<http://mingw-w64.sourceforge.net/>影響を受けませんでした。 [パール#121643
】
· Perl が FAT ドライブ上にビルドされている場合、テスト ハーネスに障害がなくなりました。
NTFS ドライブ上の Windows OS。 [パール#21442
】
· コンテキスト スタックをクローンする場合 フォーク() エミュレーション、 Perl_cx_dup() クラッシュする
含まれていないコンテキスト スタック エントリのパラメータ情報にアクセスする
"&foo;" のようなパラメーター。 [パール#121721
】
· perl #113536 によって導入されました
、すべてのメモリリーク
32 以降のほとんどの Win5.18.0 Perl では、「system」とバックティック (「 `` 」) の呼び出し
修正されました。 メモリ リークは、疑似フォークを有効にした場合にのみ発生しました。
Win32 Perl のビルドを使用しており、そのビルドを Server 2003 R2 以降の OS で実行していました。
WinXP SP3 ではリークは発生しません。 [パール #121676
】
ひるみ
· XS モジュールのビルドが大幅に復元されました。 いくつかはまだ(まだ)できません
ビルドする必要はありませんが、わずか数回の作業で WinCE 上に Perl をビルドできるようになりました。
さらなるパッチ (Socket および ExtUtils::MakeMaker への)、うまくいけば組み込まれる
お早めに。
· Perl は WinCE で実行することにより、ユーザーの介入なしに一発でビルドできるようになりました
「nmake -f Makefile.ce all」。
EVC (Embedded Visual C++) 4 でのビルドのサポートが復元されました。 パール缶
Visual C++ 2005 または 2008 用のスマート デバイスを使用して構築することもできます。
インナー 変更
· 一致変数 $1、$2 など、$`、$&、の内部表現が変更されました。
$'、${^PREMATCH}、${^MATCH}、および ${^POSTMATCH}。 使用するメモリがわずかに少なく、
ルックアップ中の文字列比較と数値変換、および 23 行少ない
C. この変更は、外部コードには影響しません。
· 配列は、&PL_sv_undef の代わりに、未使用のスロットを表すために内部で NULL を使用するようになりました。
&PL_sv_undef は特別な値として扱われなくなったため、av_store(av, 0, &PL_sv_undef)
その配列の要素 0 が読み取り専用の未定義のスカラーを保持するようになります。 "$array[0] =
any" は鳴き声を上げ、"\$array[0]" は "\undef" と等しくなります。
· によって返された SV HeSVKEY_force() の UTF8ness を正しく反映するようになりました
そのキーが SV として保存されていない場合の基になるハッシュ キー。 [パール #79074]
· XS コードで使用できる、めったに使用されない特定の関数とマクロは、非推奨になりました。
これらは: "utf8_to_uvuni_buf" (代わりに "utf8_to_uvchr_buf" を使用)、
"valid_utf8_to_uvuni" (代わりに "utf8_to_uvchr_buf" を使用)、"NATIVE_TO_NEED" (これは
とにかく正しく動作しません)、および "ASCII_TO_NEED" (これはとにかく正しく動作しませんでした)。
このリリース以降、アプリケーション コードで区別する必要がほとんどなくなりました
プラットフォームの文字セットと Latin1 の間の
Unicode がベースです。 新しいコードでは「utf8n_to_uvuni」を使用しないでください (「utf8_to_uvchr_buf」を使用してください)
代わりに)、または "uvuni_to_utf8" (代わりに "uvchr_to_utf8" を使用)、
· めったに (またはまったく) 使用されない多くのテストおよびプロファイリング用の Makefile ショートカット ターゲット
ターゲットは削除されたか、使用する唯一の他の Makefile ターゲットにマージされました。
彼ら。 具体的には、これらのターゲットは、参照したドキュメントとともになくなりました
それらまたはそれらの使用方法を説明しました:
check.second check.utf16 check.utf8 coretest minitest.prep
minitest.utf16 perl.config.dashg perl.config.dashpg
perl.config.gcov perl.gcov perl.gprof perl.gprof.config
perl.pixie perl.pixie.atom perl.pixie.config perl.pixie.irix
perl.second perl.third.config perl.valgrind.config purecovperl
pureperl quantperl test.deparse test.taintwarn test.second
test.torture test.utf16 test.utf8 test_notty.deparse
test_notty.second test_notty.valgrind test_prep.third
test_prep.valgrind torturetest ucheck ucheck. third ucheck.utf16
ucheck.valgrind utest utest.second utest.utf16 utest.valgrind
関連するコマンドを「手動」で実行することは引き続き可能です - 基礎となるものはありません
機能が削除されました。
· Perl がロケール処理を初期化しないようにすることが可能になりました。 ほとんどの場合、
Perl はロケールに注意を払いません。 (perllocale を参照してください。) それでも、今までは、
起動時に、念のため、常にロケール処理をシステムのデフォルトに初期化しています
実行中のプログラムは最終的にロケールを使用します。 (これは、最初に行うことの XNUMX つです。
Perl が実際に必要かどうかを判断するずっと前に、ロケール対応プログラムを実行する必要があります。
Perl が別のアプリケーションに組み込まれている場合を除いて、これはうまく機能します。
システムのデフォルトではないロケールが必要です。 ここで、環境変数が
"PERL_SKIP_LOCALE_INIT" は Perl の起動時に設定されます。この初期化ステップ
スキップされます。 これ以前は、Windows プラットフォームでは、これに対する唯一の回避策
欠陥は、内部 Perl コードのハッキングされたコピーを使用することでした。 必要なアプリケーション
古い Perl を使用することで、使用している組み込み Perl が必要かどうかを検出できます。
C プリプロセッサ シンボル「HAS_SKIP_LOCALE_INIT」が無効であることをテストすることによる回避策
定義されています。 [RT #38193]
・「BmRARE」「BmPREVIOUS」を削除しました。 それらはどこにも使用されておらず、使用されていません
API の一部です。 XS モジュールの場合、それらは #0 として定義されるようになりました。
· "sv_force_normal" は、通常は読み取り専用の値で鳴きますが、読み取り専用を許可するために使用されます
コンパイル時に変更される値。 これは、読み取り専用で croak するように変更されました
値に関係なく。 この変更により、いくつかのコア バグが明らかになりました。
· Perl の新しいコピー オン ライト メカニズム (デフォルトで有効になっています) により、
「SvPOK」スカラーは、コピー時にコピーオンライト スカラーに自動的にアップグレードされます。 あ
文字列バッファーの参照カウントは、文字列バッファー自体に格納されます。
具体的な例を挙げますと、以下の通りです。
$ perl -MDevel::Peek -e'$a="abc"; $b = $a; $a をダンプします。 $b' をダンプ
SV = PV(0x260cd80) at 0x2620ad8
REFCNT = 1
フラグ = (POK、IsCOW、pPOK)
PV = 0x2619bc0 "abc"\0
カーソル = 3
レンズ = 16
COW_REFCNT = 1
SV = PV(0x260ce30) at 0x2620b20
REFCNT = 1
フラグ = (POK、IsCOW、pPOK)
PV = 0x2619bc0 "abc"\0
カーソル = 3
レンズ = 16
COW_REFCNT = 1
両方のスカラーが同じ PV バッファーを共有し、COW_REFCNT が
ゼロ。
これは、SV の "SvPVX()" バッファを変更したい XS コードは、
最初に "SvPV_force()" などを呼び出して、有効な (かつ非共有の) バッファを確保し、
その後、"SvSETMAGIC()" を呼び出します。 実際、これは常に当てはまります (たとえば、
ハッシュキーはすでにコピーオンライトでした); この変更は、COW の動作を
SVの種類が豊富。
重要な違いの 5.18.0 つは、XNUMX より前の共有ハッシュ キー スカラーは、
「SvREADONLY」フラグが設定されています。 これはもはや当てはまりません。
この新しい動作は、実行することで引き続き無効にすることができます 構成
-Accflags=-DPERL_NO_COW. このオプションはおそらく Perl 5.22 で削除されるでしょう。
· "PL_sawampersand" が定数になりました。 この変数が提供するスイッチ (
$& が表示されたかどうかに応じて、一致前のコピーを有効/無効にします)
削除してコピーオンライトに置き換え、いくつかのバグを排除しました。
以前の動作は、実行することで引き続き有効にすることができます 構成
-Accflags=-DPERL_SAWAMPERSAND.
· 関数 "my_swap"、"my_htonl"、および "my_ntohl" が削除されました。 不明です
これらの関数がこれまでにマークされた理由 A、API の一部です。 XSコードはそれらを呼び出すことができません
コンパイルされていることに依存できないため、直接。 当然のことながら、CPAN にはコードがありません
それらを参照します。
· 「Perl_re_intuit_start()」正規表現関数の署名が変更されました。 関数
それに応じて、正規表現エンジンのプラグイン構造内のポインター「intuit」も変更されました。 あ
新しいパラメータ「strbeg」が追加されました。 これは、同名のものと同じ意味です。
"Perl_regexec_flags" のパラメーター。 以前は、直観は開始点を推測しようとしていました。
渡された SV からの文字列 (もしあれば)
オーバーロードされた SV)。
· 「Perl_regexec_flags()」正規表現関数の署名が変更されました。 関数
正規表現エンジンのプラグイン構造のポインタ「exec」も一致するように変更されました。 の
64 ビット システムのサポートを強化するために、「minend」パラメーターに「SSize_t」型が追加されました。
· XS コードは、さまざまなマクロを使用して、文字またはコード ポイントの大文字と小文字を変更する場合があります (
例 "toLOWER_utf8()")。 これまでに文書化されたのは、そのうちの XNUMX つだけです。 そしていま
基になる関数を呼び出すよりも優先して使用する必要があります。 「キャラクター」を参照
perlapi の大文字と小文字の変更」。
· コードは uid と gid をかなり一貫性を持って扱っていませんでした。 一部の場所では、
UV に、その他は IV に、その他は int に安全に格納できます。 XNUMX つの新しいマクロは
紹介された: SvUID(), sv_setuid(), SvGID(), sv_setgid()
・APIに「sv_pos_b2u_flags」を追加しました。 「sv_pos_b2u」と似ていますが、
64 ビット プラットフォームで長い文字列をサポートします。
· "PL_exit_flags" は、perl の "警告" を行うために、perl エンベダーやその他の XS コードで使用できるようになりました。
または、試行された終了時に「中止」します。 [パール #52000]
· "-Accflags=-PERL_BOOL_AS_CHAR" を指定してコンパイルすると、C99 および C++ コンパイラで
perl が C89 コンパイラに対して行う "bool" から "char" へのエイリアシングをエミュレートします。 [パール
#120314]
· perlapi の "sv_2pv_flags" の "sv" 引数、perlapi の "sv_2iv_flags"、
perlapi の "sv_2uv_flags"、および perlapi とその古いラッパーの "sv_2nv_flags"
sv_2pv、sv_2iv、sv_2uv、sv_2nv は非 NULL になりました。 NULL を渡すとクラッシュするようになりました。 いつ
非 NULL マーカーは 5.9.3 でまとめて導入されました。関数は非 NULL とマークされました。
NULL ですが、5.0 alpha 2 で SV API が作成されて以来、NULL が渡された場合、
関数は 0 または false 型の値を返しました。 「sv」引数をサポートするコードは
非 NULL は 5.0 alpha 2 に直接、間接的に Perl 1.0 (5.0 より前の API) に日付を記入します。 の
関数が NULL "sv" を受け入れるというドキュメントの欠如は、5.11.0 で修正されました。
5.11.0 から 5.19.5 の間では、関数は NULLOK とマークされていました。 最適化として、
NULLOK コードは削除され、関数は再び非 NULL マークになりました。
コアの getter 型マクロはこれらの関数に NULL を渡さず、クラッシュするため
NULL を渡す前に。
NULL "sv" を sv_2*v* 関数に渡すことができる唯一の方法は、XS コードを直接
sv_2*v* を呼び出します。 XS コードは Sv*V* マクロを使用して基礎となるものを取得するため、これはほとんどありません。
SV外の値。 NULL "sv" が渡される可能性のある状況の XNUMX つ
sv_2*v* 関数は、XS コードが独自のゲッター型 Sv*V* マクロを定義している場合です。
NULL の場合 パブリック API Sv*OK* を介した SV のフラグの逆参照とチェック
マクロまたはプライベート API "SvFLAGS" を直接使用し、"sv" が NULL の場合、
sv_2*v 関数は NULL リテラルを使用するか、NULL 値を含む「sv」を渡します。
· newATTRSUB はマクロになりました
パブリック API newATTRSUB は、以前はプライベート関数へのマクロでした
Perl_newATTRSUB。 関数 Perl_newATTRSUB は削除されました。 newATTRSUB は現在マクロ
別の内部関数。
· 「utf8n_to_uvchr()」によって発生する警告の変更
この最下位レベルの関数は、UTF-8 文字列の最初の文字をコードにデコードします
点。 「XS」レベルのコードにアクセスできますが、使用しないことをお勧めします
直接。 これを呼び出す高レベルの関数があり、使用する必要があります
代わりに、perlapi の "utf8_to_uvchr_buf" のようにします。 ただし、完全を期すために、これは
いくつかの変更を文書化します。 現在、奇形のテストはすべてのテストの前に行われています
その他の潜在的な問題について。 それらの問題の XNUMX つは、非常に大きなコード ポイントに関係しています。
それらは公式の標準に登場したことはありません(現在の標準はスケーリングされています
以前のバージョンから受け入れ可能な最大のコード ポイントを戻します)。 可能です(とはいえ
CPAN では行われていない) これらのコードポイントを警告および/または禁止し、より小さなものを受け入れます。
法的な Unicode の最大値をまだ上回っているコード ポイント。 の警告メッセージ
マシン上で表現可能な場合、これにはコード ポイントが含まれるようになりました。 以前は
常に未加工のバイトを表示します。これは、表現できないコードに対してまだ行われていることです
を指しています。
· プラグ可能な正規表現エンジン インターフェイスに影響する正規表現エンジンの変更
regexp.h を介して公開され、extflags を設定するために使用される多くのフラグ
struct regexp のメンバーが削除されました。 これらのフィールドは技術的に非公開でした
Perl 独自の正規表現エンジンであり、そもそもそこで公開されるべきではありませんでした。
影響を受けるフラグは次のとおりです。
RXf_NOSCAN
RXf_CANY_SEEN
RXf_GPOS_SEEN
RXf_GPOS_FLOAT
RXf_ANCH_BOL
RXf_ANCH_MBOL
RXf_ANCH_SBOL
RXf_ANCH_GPOS
次のフラグ マスクと同様に:
RXf_ANCH_SINGLE
RXf_ANCH
すべて PREGf_ と同等の名前に変更され、regcomp.h に移動されました。
XNUMX つまたは複数の RXf_ANCH_ フラグを設定することによって以前に達成された動作 (
RXf_ANCH マスク) は、extflags の *XNUMX つの* フラグ ビットに置き換えられました。
RXf_IS_ANCHORED
以前にこれらのフラグを設定するために使用されたプラグ可能な正規表現エンジンは、これを設定する必要があります
単独フラグ。
· Perl コアは一貫して "av_tindex()" ("配列のトップ インデックス") を
「av_len()」のより明確な名前の同義語。
· あいまいなインタプリタ変数「PL_timesbuf」は、早期に削除される予定です。
5.21.x 開発シリーズ。Perl 5.22.0 では XS 作成者には提供されません。
この変数は 5.20.0 でもまだ存在しますが、この事前警告が
非推奨は、その変数を使用しているすべての人に役立ちます。
選択した バグ 解消された問題
レギュラー 式
· 一致しない、またはクラッシュする可能性がある少数の正規表現構造を修正しました
perl 照合対象の文字列が 2 ビットの 32GB 境界を超えて割り当てられている場合
システム。 [RT #118175]
· "(?[...])" 正規表現の解析に関連するさまざまなメモリ リーク
構成が修正されました。
· "(?[...])" で、"(?[...])" で構成されるプリコンパイル済みパターンの補間が可能になりました
("$pat = qr/(?[ [a] ])/; /(?[ $pat ])/") 内の角かっこで囲まれた文字クラス。
以前は、括弧が正規表現パーサーを混乱させていました。
· 「長さがゼロの式では量指定子が予期されません」という警告メッセージが表示されることがある
Perl v5.10 以降では、代替も含む正規表現に対して XNUMX 回
(例: "a|b") トライ最適化をトリガーします。
· Perl v5.18 は、上向きと下向きの補間が混在するバグを誤って導入してしまいました。
正規表現内の等級付けされた UTF-8 文字列により、次のパターンで不正な形式の UTF-8 が発生する可能性があります。
特に、範囲「\x80..\xff」内のダウングレードされた文字が UTF-8 に従っている場合
文字列、例:
utf8::upgrade( my $u = "\x{e5}");
utf8::downgrade(my $d = "\x{e5}");
/$u$d/
[RT#118297]
· 複数のコード ブロックを含む正規表現では、$1、$2 などの値は、
ネストされた正規表現呼び出しによって設定されたブロックは、あるブロックから次のブロックにリークします。 今
これらの変数は常に、変数の先頭にある外側の正規表現を参照します。
埋め込みブロック [perl #117917]。
· "/$qr/p" は Perl 5.18.0 で壊れていました。 "/p" フラグは無視されました。 これは修正されました。
[perl#118213]
· Perl 5.18.0 から、"/[#](?{})/x" のような構造の "#" が間違っていました。
コメントとして解釈されます。 コード ブロックはスキップされ、解析されません。 これは、
修正しました。
· Perl 5.001 から、"/[#$a]/x" や "/[#]$a/x" のような正規表現は
その「#」はコメントとして誤って解釈されるため、変数は補間されません。
これは修正されました。 [perl #45667]
· Perl 5.18.0 は誤って逆参照された正規表現 ("${ qr//}") を false として
ブール値。 これは修正されました。
· 正規表現での "\G" の使用は、パターンの先頭以外では、
バグがわずかに少なくなりました(ただし、まだ多少問題があります)。
· 正規表現にコード ブロック ("/(?{...})/") が含まれる場所、および
定数のオーバーロードにより、コード ブロックの再コンパイルがトリガーされました。
コンパイルは、その外側のレキシカル スコープを認識しませんでした。 これは Perl 5.18.0 でのリグレッションでした。
· 文字列の表現が変わると、「pos」で設定された文字列の位置がずれる可能性があります
内部的に utf8 との間でやり取りされます。 これは、たとえば、次のようなオブジェクトへの参照で発生する可能性があります。
文字列のオーバーロード。
· 同じ引数を持つ XNUMX つの "pos" 呼び出しの戻り値への参照を取得します。
次に、一方に参照を割り当て、もう一方に「undef」を割り当てると、アサーションが発生する可能性があります
障害またはメモリリーク。
· @- および @+ の要素は、存在しないキャプチャを参照する場合に正しく更新されるようになりました。
以前は、参照された要素 ("$ref = \$-[1]") が間違った一致を参照する可能性がありました。
その後の試合の後。
· \123 などの正規表現の後方参照 (または曖昧な後方参照/XNUMX 進数) を解析するコードは、
シンプルな atoi()、長い数字の文字列では負の値に丸められる可能性があります。
セグメンテーション違反の原因となります。 この問題は修正されました。 [パール #119505]
· 別の typeglob を「*^R」に割り当てても、正規表現エンジンが作成されなくなりました
クラッシュ。
· 「\N」正規表現エスケープは、中括弧なしで使用した場合(つまり、
"[^\n]") は、/x の下に空白が続く場合、後続の "*" を無視していました。 それは持っていました
5.12.0 で「[^\n]」を意味する「\N」が導入されて以来、このようになりました。
· 「s///」、「tr///」、および「y///」は、ワイド文字が区切り文字として使用されている場合に機能するようになりました。
[perl#120463]
· 正規表現で終了しない (?...) シーケンスが使用される場合があります (例: "/(?
「パニック: メモリラップ」の代わりに適切なエラーメッセージを生成するように修正されました。
他のケース (例: "/(?(/") はまだ修正されていません。
· オーバーロードされたオブジェクトへの参照への参照が通常のオブジェクトから返されたとき
式「(??{...})」コード ブロックでは、不正な暗黙的な逆参照が発生する可能性があります
内部参照が以前にコード ブロックによって返されていた場合。
· "(??{...})" から返された結合変数は、一致変数の内部値を参照します。
(つまり、ブロック内の一致からの $1 など) を FETCH メソッドに含めます。 これは。。。でした
オーバーロードされたオブジェクトへの参照が最後に割り当てられたものである場合は、この限りではありません。
タイド変数。 代わりに、一致変数は、実行中に外側のパターンを参照しました。
FETCH呼び出し。
· ロケールを使用した正規表現による予期しない汚染を修正しました。 以前は、特定の条件下で、
文字クラスを使用すると、不適切な場合でも汚染が発生する可能性があります。 あるキャラクター
クラスはロケールに依存しますが、このパッチが適用される前は、汚染が発生することがありました。
ロケールに依存しない文字クラスであっても。 [パール #120675]
· 特定の条件下で、後読みアサーション内にある場合、Perl はエラーをスローします。
正規表現、アサーションは名前付きサブパターンを参照し、後読みが
そうでない場合は変数です。 これは修正されました。 [perl #120600]、[perl #120618]。 の
現在の修正は将来的に改善される可能性があります。
· $^R は、それを初期化する正規表現以外では使用できませんでした。 [パール
#121070]
· 大規模な修正とリファクタリングのセット re_intuit_start() 統合されました、ハイライト
には次の値があります:
· 正規表現「/\x{100}[xy]\x{100}{2}/」をコンパイルする際のパニックを修正しました。
· グローバル パターン マッチを実行するときのパフォーマンスの低下を修正しました。
UTF-8文字列。 [パール #120692]
· 次のような正規表現に一致する別のパフォーマンスの問題を修正しました。
長い UTF-1,2 文字列に対する「/ab.{8}x/」はバイトを不必要に計算します
文字列の大部分のオフセット。 [パール #120692]
· HP 上で GCC を使用してビルドした場合の正規表現のコンパイル時のアライメント エラーを修正しました。
UX 64 ビット。
· 64 ビット プラットフォームでは、「pos」を 2**31-1 より大きい値に設定できるようになりました。 [パール
#72766]
パール 5 デバッガ -d
· デバッガの「man」コマンドが修正されました。 v5.18.0 リリースでは壊れていました。 の
「man」コマンドは「doc」および「perldoc」という名前にエイリアスされ、すべて再び機能するようになりました。
· @_ がデバッガーで正しく表示されるようになり、で導入された回帰が修正されました。
v5.18.0のデバッガ。 [RT #118169]
· コピーオンライト ビルド (5.20.0 のデフォルト) では、「${'_<-e'}[0]」は取得されなくなりました。
めちゃくちゃになった。 これは、デバッガーがワンライナーで使用するために保存された入力の最初の行です。
[perl#118627]。
· 非スレッド ビルドの場合、「${」_ を設定します。
「__FILE__」と一部のエラー メッセージにより破損した文字列が生成されます。
文字列 eval 内の「#line」ディレクティブがソース行を
デバッガ。 スレッドビルドは影響を受けませんでした。
· Perl 5.12 以降、行番号は次の場合に XNUMX ずつずれていました。 -d スイッチはで使用されました
#! ライン。 今ではそれらは正しいです。
· 「*DB::DB = sub {} if 0」は、Perl のデバッグ モードが「DB::DB」を見つけるのを停止しなくなりました
その後サブが宣言されました。
· 「%{'_<...'}」ハッシュは、対応する「@{'_<...'}」ではなくブレークポイントを設定するようになりました。
@DB::dbline のエイリアスが割り当てられている配列。 [パール #119799]
· $DB::sub を設定するときに set-magic を呼び出します。 [パール #121255]
· デバッガの「n」コマンドは左辺値サブルーチンを尊重し、それらをステップオーバーするようになりました [perl
#118839]。
語彙 サブルーチン
· 字句定数 (「my sub a() { 42 }」) がインライン化されたときにクラッシュしなくなりました。
· 字句サブルーチンに付加されたパラメータ プロトタイプがコンパイル時に尊重されるようになりました。
括弧なしのサブコール。 以前は、プロトタイプは次の場合にのみ認められていました。
呼び出し 括弧。 [RT #116735]
· 同じサブルーチンへの呼び出しと組み合わせた字句サブルーチンの構文エラー
コンパイル時にクラッシュが発生しなくなりました。
· 深い再帰警告によって字句サブルーチンがクラッシュしなくなりました。 [RT #118521]
· dtrace サブエントリ プローブは、[perl をクラッシュさせるのではなく、字句サブで動作するようになりました。
#118305]。
· インライン化可能な字句サブルーチンの定義を解除すると ("my sub foo() { 42 } undef &foo")
警告がオンになっている場合はクラッシュが発生します。
· 継承されたメソッドとして使用される未定義の字句サブルーチンがクラッシュしなくなりました。
· 「CORE」という名前の語彙サブの存在によって、CORE:: プレフィックスが停止されることはなくなりました。
ワーキング。
エブリシング 他
· OP 割り当てコードは、「構造体」のすべてのケースで正しくアライメントされたメモリを返すようになりました。
pmop"。以前は、4 バイト境界にアライメントされたメモリのみを返すことができました。
これは、一部の 64 ビット プラットフォーム上の 32 ビット IV を使用した ithread ビルドでは正しくありません。 特に、
これにより、sparc GNU/Linux ではビルドが完全に失敗しました。 [RT #118055]
· 使用されるハッシュの数が増えるにつれて、スカラー コンテキストでの大きなハッシュの評価が大幅に高速化されました。
ハッシュ内のチェーンは、より大きなハッシュに対してキャッシュされるようになりました。 より小さなハッシュは引き続き使用できません
これにより 1 つの IV が節約されるため、それを保存し、必要なときに計算します。 それは XNUMX IV になります
ハッシュから構築されたすべてのオブジェクトのオーバーヘッド。 [RT #114576]
· Perl v5.16 は、表示されない XSUB を呼び出すバグを誤って導入しました。
コンパイル時に左辺値として扱われ、たとえ
サブルーチンは左辺値サブルーチンではありませんでした。 これは修正されました。 [RT #117947]
· Perl v5.18.0 のデュアル変数では、文字列部分に空の文字列が含まれていましたが、ゼロ以外の文字列が含まれていました。
数値部分の数値は true として扱われ始めます。 以前のバージョンでは、
は false として扱われ、文字列表現が優先されます。 老人
動作が回復しました。 [RT #118159]
· Perl v5.12 以降、同じ組み込みキーワードをオーバーライドする定数のインライン化
name が「use subs」を取り消したため、その後、使用する定数についての言及が生じました。
代わりに組み込みキーワードを使用します。 これは修正されました。
· 「-l $handle」によって生成される警告は、IO ref と glob だけでなく、IO ref と glob にも適用されるようになりました。
グロブ参照。 この警告も UTF8 クリーンになりました。 [RT #117595]
· 「delete local $ENV{nonexistent_env_var}」でメモリリークが発生しなくなりました。
· 「sort」と「require」の後に「CORE::」というプレフィックスが付いたキーワードは、キーワードとして扱われるようになりました。
サブルーチンまたはモジュール名としてではなく、キーワードとして使用します。 [RT #24482]
· 特定の難問を解決して、現在のパッケージを解放することができます。
特定の演算子 (「bless」、「reset」、「open」、「eval」) は対応できず、クラッシュします。
より弾力性が増しました。 [RT #117941]
· グロブ間の割り当てを通じてファイルハンドルのエイリアスを設定すると、内部メソッドが更新されない
ファイルハンドルと同じ名前のパッケージが存在する場合、適切にキャッシュされるため、
filehandle メソッド呼び出しは代わりにパッケージに行きます。 これは修正されました。
· 「./Configure -de -Dusevendorprefix」はデフォルトではありませんでした。 [RT #64126]
· 「ステートメントに到達する可能性は低い」という警告が perldiag にリストされていました。
「exec」カテゴリの警告ですが、「syntax」カテゴリによって有効または無効にされました。 の上
一方、「exec」カテゴリはその致命的な性質を制御しました。 それは今では完全に
「exec」カテゴリで処理されます。
· 「tr///」および「y///」に対する「置換リストは検索リストよりも長いです」という警告
「/c」フラグが存在すると、この問題がさらに発生します。 [RT #118047]
· NV の文字列化はキャッシュされないため、語彙ロケールが制御されます。
小数点の文字列化。 [パール #108378] [パール #115800]
· Perl のロケールの処理に関連するいくつかの修正が行われました。 perl #38193
上記の「内部変更」で説明されています。 #118197 も修正されています。
(小数点) 文字は ASCII 文字である必要があります (一部の文字では機能しません)
非西洋言語); #115808、失敗時に「POSIX::setlocale()」が返される
「undef」は、たとえ警告があったとしても、定義されていないことを警告しませんでした。
有効になりました。
· 0 番目の引数が XNUMX に評価される名前付き定数である「分割」演算子のコンパイル
定数の値が変更されることはなくなりました。
· "index" の XNUMX 番目の引数として使用される名前付き定数が強制されなくなりました。
参照、正規表現、dualvar などの場合は文字列。
· の XNUMX 番目の引数として使用される、未定義の値に評価される名前付き定数
「index」はコンパイル時に「初期化されていない」という警告を生成しなくなりました。 それはまだ
実行時にそれらを生成します。
· @INC のサブルーチンからスカラーが返された場合、参照されたスカラーは
魔法のように IO のものに変換され、場合によっては「奇妙なコピー」エラーが発生する可能性があります。
そのスカラーは引き続き他の場所で使用されます。 Perl は、次の内部コピーを使用します。
代わりにスカラー。
· 「sort」演算子の特定の使用法は、配列を適切に変更するために最適化されています。
「@a = @a をソート」。 並べ替え中、配列は読み取り専用になります。 ソートブロックの場合
たまたま死んだ場合、配列は「並べ替え」の外でも読み取り専用のままでした。 これ
修正されました。
· sort ブロック内の $a と $b は、「sort」への実引数のエイリアスであるため、
これら XNUMX つの変数を通じて変更できます。 これは常に機能するとは限りません。たとえば、
lvalue subs と $#ary、そしておそらく他の多くの演算子。 今では動作します。
· 「sort」の引数はすべてリスト コンテキスト内にあります。 「sort」自体が呼び出された場合
void またはスカラー コンテキストでは、 一部引数のすべてではありませんが、以前は void でした
またはスカラーコンテキスト。
· U+00FF を超える Unicode 文字を含むサブルーチン プロトタイプが途中で壊れていました。
クロージャーのクローン作成。 これは、字句変数を閉じるサブルーチンで発生します。
外部で、字句サブを使用して宣言されます。
· "UNIVERSAL::can" は、メソッド呼び出しと同じように最初の引数を処理するようになりました。
空ではない IO スロットを持つタイプグロブとグロブ参照はハンドルとして扱われ、
その名前のハンドルがある場合、文字列はパッケージではなくファイルハンドルとして扱われます。
存在します [perl #113932]。
· typeglob の文字列化に使用される typeglob のメソッド呼び出し (例: "*ARGV->getline")
それからもう一度調べてください。 Perl 5.18.0 の変更と組み合わせることで、「*foo->bar」が可能になりました。
「foo」パッケージのメソッドを呼び出します (「foo->bar」など)。 場合によっては、それが原因となる可能性があります
メソッドが間違ったハンドルで呼び出される。 typeglob 引数は、
ハンドル (「(\*foo)->bar」と同様)、またはその IO スロットが空の場合、エラーが発生します。
· vstring を関連付けられた変数、またはサブルーチン引数にエイリアスして割り当てる。
vstring をフラット化せずに、存在しないハッシュまたは配列要素が機能するようになりました。
通常の文字列。
· 「pos」、「tie」、「tied」、および「untie」は、エイリアス化されたサブルーチン引数では正しく機能しませんでした。
存在しないハッシュおよび配列要素への変換 [perl #77814、#27010]。
· 「=>」ファットアロー演算子は、組み込みのキーワードを引用できるようになりました。
次の行で、他の裸の単語の扱い方と一貫性を持たせます。
· 「\&$glob」によるサブルーチン スタブの自動有効化により、Perl 5.18.0 でクラッシュが発生し始めました。
$glob が実際の glob の単なるコピー、つまり glob を持っていたスカラーの場合
それに割り当てられています。 これは修正されました。 [パール #119051]
· Perl は、戻り値を参照する際に実装の詳細をリークしていました。
特定の演算子の値。 「for ($a+$b) { warn \$_; warn \$_ }」は XNUMX つを表示するために使用されます
「\」演算子が変数をコピーしていたため、メモリ アドレスが異なります。 下
スレッドビルドの場合、定数でも発生します ("の(1) { ... }")。これは、
修理済み。 [perl #21979、#78194、#89188、#109746、#114838、#115388]
· 範囲演算子「..」は呼び出しごとに同じ変更可能なスカラーを返していました。
それが「foreach」ループヘッダー内の唯一のものでない限り。 これは、次の変更を意味します
返されたリスト内の値は、次回演算子が実行されたときに表示されます。
実行されました。 [パール #3105]
· 定数の折りたたみとサブルーチンのインライン化によって、次のような操作が発生しなくなりました。
通常は、代わりに読み取り専用の値を返すために、新しい変更可能なスカラーを返します。
· 「sub () { $some_variable }」形式のクロージャはインライン化されなくなり、
サブルーチンの呼び出し元によって無視されるように変数に変更します。 [パール #79908]
· 「ref」などの特定の演算子の戻り値が、複数の演算子の間で共有されることがありました。
同じサブルーチンへの再帰呼び出しにより、内部呼び出しで値が変更される
外部呼び出しの「ref」によって返されます。 これは修正されました。
· "__PACKAGE__" とパッケージ名またはハッシュ キーを返す定数が一貫して使用されるようになりました。
読み取り専用。 以前のさまざまな Perl リリースでは、特定の条件下で変更可能になりました。
状況。
· 「一度使用」警告を有効にしても、作成されたスタッシュ循環でクラッシュが発生しなくなりました
コンパイル時 (「*Foo::Bar::Foo:: = *Foo::」)。
· ハッシュ キーで使用される undef 定数 (「use constant u => undef; $h{+u}」) は廃止されました
コンパイル時に「初期化されていない」という警告が生成されます。
· 置換置換内の置換ターゲットを変更しても、問題が発生しなくなりました。
クラッシュします。
· 文字列 eval 内の最初のステートメントで、間違ったプラグマ設定が使用されていました。
時々一定の折り畳み中に。 「eval 'uc chr 0xe0'」は、以下からランダムに選択します。
Unicode、バイト、およびロケールのセマンティクス。 これは修正されました。
· @INC フィルターの戻り値の処理 (サブルーチンによって返されるサブルーチン)
@INC) がさまざまな方法で修正されました。 以前に関連付けられた変数が誤って処理され、
$_ を参照または typeglob に設定すると、クラッシュが発生する可能性があります。
· "SvPVbyte" XS 関数は、返される結合されたスカラーで動作するように修正されました。
文字列以外のもの。 「SvPV」の場合、utf8 を返していました。
。
· Perl 5.18.0 は、逆参照された正規表現で「--」と「++」を誤ってクラッシュさせてしまいました。
式を修正し、「++」による vstring のフラット化を停止しました。
· 最初の引数が次の場合、「bless」は「非参照値を祝福できません」で終了しなくなりました。
結合参照。
· 引数を指定した「reset」では、コピーオンライト スカラー、正規表現、
typeglob コピーと vstring。 また、それらの値または読み取り専用の値が見つかった場合、
同じ名前の配列またはハッシュをスキップしなくなりました。
· 引数を指定した "reset" は、typeglobs にエイリアスされたスカラーをスキップするようになりました ("for $z (*foo) {
リセット "z" }")。以前は、メモリが破損したりクラッシュしたりしていました。
· "ucfirst" と "lcfirst" は bytes プラグマを尊重していませんでした。 これは退行でした
Perl 5.12 から。 [パール #117355]
· 「UNIVERSAL::DESTROY」への変更により、代わりにすべてのクラスの DESTROY キャッシュが更新されるようになりました。
そのため、すでにオブジェクトが破棄されているクラスは古いサブルーチンを引き続き使用します。
これは Perl 5.18 での回帰でした。 [パール #114864]
· 非推奨の警告「「\」の無駄な使用。
Perl 5.18.0 で追加されたメタキャラクタ '%c'" は削除されました。 [perl
#119101]
· $^E の値が Windows 上のシグナル ハンドラー間で保存されるようになりました。 [パール #85104]
· 語彙ファイルハンドル (「open my $fh...」など) には、通常、
現在のパッケージと変数の名前 (例: "main::$fh")。 再帰では、
ファイルハンドルの名前の「$fh」部分が失われていました。 これは修正されました。
· XSUB によって返される初期化されていない値は、初期化されていない値から除外されなくなりました
警告。 [perl#118693]
· 「elsif ("")」は無効なコンテキストに関する警告を誤って生成しなくなりました。 [パール
#118753]
· サブルーチンに "undef" を渡すと、@_ に同じ読み取り専用の unknown が含まれるようになりました。
「undef」が返すスカラー。 さらに、「exists $_[0]」は次の場合に true を返すようになりました。
「undef」が最初の引数でした。 [パール #7508、#109726]
· 存在しない配列要素をサブルーチンに渡しても、通常は自動有効化されません。
サブルーチンがその引数を変更しない限り。 これは正しく動作しませんでした
負のインデックスと配列内に存在しない要素を含む。 要素は
すぐに生き返る。 遅延蘇生が拡張されて機能するようになりました。
それらの。 [パール #118691]
· @foo 配列の後に $#foo によって返されるスカラーに参照またはグロブを割り当てる
解放されても、ビルドのデバッグ時にアサーション エラーが発生したり、メモリ リークが発生したりしなくなりました。
通常のビルド。
· 64 ビット プラットフォームでは、1..1000000000000 のような大きな範囲はクラッシュしなくなりましたが、使い果たされてしまいます。
代わりにあなたのすべての記憶を。 [パール #119161]
· 「__DATA__」は、現在のパッケージであっても、「DATA」ハンドルを適切なパッケージに配置するようになりました。
パッケージの名前はグロブ割り当てによって変更されました。
・「die」、「last」、「next」、「redo」、「goto」、「exit」でスコープを巻き戻すと、
「DESTROY」の場合は、現在実行中のサブルーチンまたはフォーマットを再帰的に呼び出します。
出ました。 その場合、サブルーチン内の字句変数が最初に始まることがあります。
本来の未定義の値ではなく、外部呼び出しからの値を持ちます。 これ
修正されました。 [パール #119311]
· ${^MPEN} は ${^MATCH} の同義語として扱われなくなりました。
· Perl は、「(caller)[2]」の正しい行番号を返そうとするために、もう少し努力するようになりました。
[perl#115768]
· 複数行の引用符のような演算子の中の行番号が正しく報告されるようになりました。 [パール
#3643]
· 引用符のような演算子に埋め込まれたコード内の「#line」ディレクティブが尊重されるようになりました。
· XNUMX つのヒアドキュメント マーカーがある場合、XNUMX 番目のヒアドキュメント内の行番号が正しくなりました。
同じ線上に発生します。
· Perl 5.18 の最適化により誤った仮定が行われ、不正な相互作用が発生しました。
Devel::CallParser CPAN モジュール。 モジュールがロードされた場合は、字句変数
「my(...)」リストに続く別のステートメントで宣言されたものは、クリアに失敗する可能性があります。
スコープ出口。
· &xsub および "goto &xsub" 呼び出しにより、呼び出されたサブルーチンが次の要素を自動的に有効化できるようになりました。
@_。
· *_ が未定義で ARRAY エントリがない場合でも、&xsub と "goto &xsub" がクラッシュしなくなりました
(つまり、@_ が存在しません)。
· &xsub と "goto &xsub" は @_ を結び付けて機能するようになりました。
· 長すぎる識別子によってバッファ オーバーフロー (およびクラッシュ) が発生しなくなりました。 彼らは始めました
Perl 5.18 でこれを実行します。
· 警告「スカラー値 @hash{foo} は $hash{foo} として記述した方がよい」というメッセージが表示されるようになりました。
誤検知が少なくなります。 特に、@hash{+function_returning_a_list} と @hash{ qw
"foo bar baz" } は警告しなくなりました。 配列スライスにも同じことが当てはまります。 [パール #28380,
#114024]
· "$! = EINVAL; waitpid(0, WNOHANG);" 内部無限ループに陥ることはなくなりました。
[perl#85228]
· ファイルハンドルの重複で発生する可能性のあるセグメンテーション違反が修正されました。
· @INC のサブルーチンは、初期値を含むスカラーへの参照を返すことができます。
ファイルの内容。 ただし、そのスカラーは参照されなかった場合、途中で解放されます。
他の場所では、ランダムな結果が得られます。
· "last" は、同じステートメントがこれまでに蓄積した値を返さなくなりました。修正されました。
とりわけ、「push @a, last」が返そうとする長年のバグ
@a をプロセス内でスカラーのようにコピーすると、「Bizarre」というエラーが発生します。
最後の ARRAY のコピー。」 [perl #3112]
· 場合によっては、ファイル ハンドルを閉じると、プロセスとの間でパイプするために開いたハンドルが開かれることがありました。
標準ハンドルに複製されると、Perl の内部 waitpid ラッパーが呼び出されます。
pid はゼロです。 [perl #85228] の修正により、このゼロの PID が渡されました。
「waitpid」により、プロセスがブロックされている可能性があります。 プロセス XNUMX を待機する必要はなくなりました
が発生します。 [パール #119893]
· "select" は XNUMX 番目 (タイムアウト) 引数のマジックを無視するために使用され、影響を及ぼしました。
期待されるスリープ時間ではなく、無期限にブロックする「選択」など。 これは持っています
今は修正されました。 [パール #120102]
· 「for my class $foo」のクラス名が正しく解析されるようになりました。 の場合、
クラス名の 1 番目の文字の後に数字が続きます (例: 'aXNUMXb')。
「ループ変数に$がありません」というエラーが発生します。 [パール #120112]
· Perl 5.18.0 は、「use strict」および「use integer」で「-bareword」を誤って禁止しました。
これは修正されました。 [perl#120288]
· 行の先頭に「-a」(またはファイルテストではない任意の XNUMX 文字を含むハイフン)
演算子) は、「括弧なしの "-a" の使用は次のとおりです」という誤ったメッセージを生成しなくなりました。
曖昧な警告。 [パール #120288]
· 左辺値コンテキストがベア ブロックと「if」および「else」ブロックに適切に伝播されるようになりました。
左辺値サブルーチン内。 以前は、配列とハッシュが誤って表示されることがありました。
左辺値リストのコンテキストで返されるときにフラット化されるか、「奇妙なコピー」エラーが発生する可能性があります。
[perl#119797]
· 左辺値コンテキストが "||" の分岐に伝播されるようになりました。 と「&&」(そして彼らの
同等のアルファベット、「or」および「and」)。 これは、「foreach (pos $x || pos $y)」を意味します。
{...}" では、$_ を介して "pos" を変更できるようになりました。
· "stat" と "readline" は最後に使用されたハンドルを記憶します。 前者は特殊な「_」です。
ファイルハンドル、後者は「${^LAST_FH}」です。 "eval "*foo if 0"" *foo が最後でした
ハンドルが「stat」または「readline」に渡されると、そのハンドルが忘れられる可能性があります。
ハンドルはまだ開いていません。 これは修正されました。
・「delete $::{a}」や「delete $::{ENV}」などでクラッシュする様々なケースが確認されています。
修理済み。 [パール #54044]
・$を設定する! 「require」を呼び出す前に EACCESS にアクセスすると、「require」の動作に影響を与える可能性があります。
これは修正されました。
· 「式では $1 を意味するために \1 を使用できません」という警告メッセージが、
置換の右側 (置換) 部分。 以前はコード内で発生する可能性がありました
左側、またはその他の引用符のような演算子に埋め込まれます。
· 参照への祝福 (「bless $thisref, $thatref」) は長い間禁止されてきましたが、
$/ などの XNUMX 番目の魔法のスカラーと、結ばれたスカラーは除外されました。 彼らはもう
は。 [パール #119809]
· クラス引数が次の場合、参照への祝福が誤って 5.18 で許可されました。
古いメソッド キャッシュを持つ祝福された参照 (つまり、そのクラスにサブルーチンが定義されていた)
最後のメソッド呼び出し以降)。 5.16 と同様に、これらは再び禁止されます。
· $x が「my Class $x」として宣言されている「$x->{key}」は、次の場合にクラッシュしなくなりました。
Class::FIELDS サブルーチン スタブが宣言されています。
· @$obj{'key'} と "${$obj}{key}" はコンパイル時のフィールド チェックから除外されていました
(「そのようなクラス フィールドはありません」。フィールドを参照) しかし、現在はそうではありません。
· 大きなインデックスを持つ存在しない配列要素が、
配列にアクセスして要素にアクセスしようとしてもクラッシュが発生しなくなりました。
· NEGATIVE_INDICES という名前のサブルーチン スタブを宣言しても負の配列が作成されなくなりました
現在のパッケージが結合配列クラスである場合、インデックスがクラッシュします。
· CORE::GLOBAL:: パッケージでの "require"、"glob"、または "do" サブルーチン スタブの宣言
対応する関数の呼び出しのコンパイルがクラッシュすることはなくなりました。
· CORE::GLOBAL:: 関数の定数へのエイリアス化は Perl 5.10 では機能しなくなりましたが、
今は修正されました。
· "`...`" または "qx/.../" が "readpipe" オーバーライドを呼び出すとき、二重引用符補間
オーバーライドがない場合と同様に、これが行われます。 以前は、
オーバーライドすると、これらの引用符のような演算子が「q{}」のように動作し、
補間。 [パール #115330]
· "<<<`...`" ヒアドキュメント (バッククォートを区切り文字として使用) は、"readpipe" オーバーライドを呼び出すようになりました。
[perl#119827]
· 「&CORE::exit()」と「&CORE::die()」は vmsish ヒントを考慮するようになりました。
· 同じグロブの定義を解除する DESTROY メソッドをトリガーするグロブの定義を解除できるようになりました。
安全。 以前は、「参照されていないグロブ ポインターを解放しようとしています」という警告が生成されていました。
メモリのリーク。
· サブルーチンの再定義 (「eval 'sub foo{}'」または XS コードの場合は「newXS」) がトリガーされた場合、
再定義されるサブルーチンの DESTROY メソッド。そのメソッドは
同じスロットへのサブルーチン (「*foo = sub {}」)、$_[0] はもはや、
解放されたスカラー。 現在、DESTROY は新しいサブルーチンがインストールされるまで遅延されます。
· Windows では、perl は呼び出されなくなりました クローズハンドル() ソケットハンドルに。 これにより、
特定の無関係な不正なハンドル例外を削除することで、Windows でのデバッグが容易になります。 それ
また、Perl プロセスでソケット関数がランダムに失敗する競合状態も修正されました。
複数の OS スレッドがあり、テストが失敗する可能性があります。
dist/IO/t/cachepropagate-tcp.t。 [パール #120091/118059]
· UTF-8 でエンコードされた文字列、またはタイ、オーバーロードなどの奇妙な変数を含む形式
文字列化された ref (および最近の Perl では純粋な NOK 変数) は一般的に間違った動作をします。
次のように、var が文字列として扱われ、繰り返し切り取られるときの形式のもの
「^<<<~~」など。 この問題は現在解決されています。 [パール
#33832/45325/113868/119847/119849/119851]
· 「semctl(..., SETVAL, ...)」は、セマフォを指定されたセマフォの上位 32 ビットに設定します。
32 ビット ビッグ エンディアン システムでは、下位 64 ビットの代わりに整数が使用されます。 [パール #120635]
· "readdir()" は $! のみを設定するようになりました。 エラーで。 $! その後、「EBADF」に設定されなくなります
システムコールが $! を設定しない限り、終端の「undef」はディレクトリから読み取られます。 [パール
#118651]
· &CORE::glob は、perl のスタック取得による断続的なクラッシュを引き起こさなくなりました。
破損しています。 [パール #119993]
· モジュールをロードするレイヤー (例: "<:encoding(utf8)") で "open" を実行しても、
スタックの破損によりクラッシュする危険性があります。
· Perl 5.18 は、AUTOLOAD を検索することにより、「->SUPER::foo」メソッド呼び出しによる自動ロードを中断しました。
現在のパッケージのスーパークラスではなく、現在のパッケージから。 これは、
修理済み。 [パール #120694]
· 定数が true を保持する場合に「CONSTANT まで {} を実行」を引き起こす長年のバグ
未割り当てメモリを読み取るための値が解決されました。 これは通常、次の後に発生します
構文エラー。 Perl の過去のバージョンでは、断続的にクラッシュしていました。 [パール #72406]
· HP-UX を修正 $! 失敗。 HP-UX strerror() 不明なエラーの場合は空の文字列を返します
コード。 これにより、DEBUGGING ビルドでアサーションが失敗する原因となりました。 今では代わりに、
「$!」の文字列が返されました。 コードが不明なエラーのものであることを示すテキストが含まれています。
· @INC の個別に関連付けられた要素 ("tie $INC[0]..." など) が正しく処理されるようになりました。
以前は、このような関連付けられた要素によって返されるサブルーチンがサブルーチンとして扱われるかどうか
以前に FETCH が発生したかどうかに依存します。
· 同じ "getc" 演算子が utf8 で使用された後のバイト サイズのハンドルでの "getc"
バイトを utf8 として扱うためにハンドルが使用されるため、不安定な動作が発生します (例: 不正な形式)
UTF-8 の警告)。
· フォーマット引数行の先頭にある最初の "{" は常に次のように解釈されました。
v5.18 より前のブロックの先頭。 Perl v5.18 では、次のように扱われ始めました。
曖昧なトークン。 パーサーは、それが匿名であるべきかどうかを推測します。
ハッシュ コンストラクターまたは内容に基づくブロック。 これで、以前の動作は
復元されました。 [パール #119973]
· Perl v5.18 では、「undef *_; goto &sub」および「local *_; goto &sub」がクラッシュし始めました。 これ
修正されました。 [パール #119949]
· バックティック (" `` " または " qx// ") を Win32 上の複数のスレッドと組み合わせると、次のような結果が生じる可能性があります。
外部コマンドのバッククォートによってキャプチャされている XNUMX つのスレッドで stdout に送信された出力
別のスレッドで。
Win32 の疑似フォークは次のとおりであるため、これは疑似フォークされたプロセスでも発生する可能性があります。
スレッドに関して実装されます。 [パール #77672]
· "open $fh, ">+", undef" は、TMPDIR が設定されているが、
ディレクトリには一時ファイルを作成できません。 [perl #120951]
· " for ( $h{k} || '' ) " は $h{k} を自動的に有効化しなくなりました。 [パール #120374]
· Windows マシン上で、Perl はロケール環境の POSIX 使用をエミュレートするようになりました。
初期化。 以前は、環境は無視されました。 「環境」を参照してください。
ペルロケール。
· 自己参照 GLOB を破棄するときのクラッシュを修正しました。 [パール #121242]
知られている 問題
· IO::Socket は AIX 5.3 でのテストに失敗することが知られています。 パッチがあります
リクエストトラッカー#120835、
これは将来のリリースに適用される可能性があります。
· 次のモジュールは、このバージョンの Perl でテストに失敗することが知られています。
パッチは提出されているので、近いうちに新しいリリースがリリースされると思われます。
· Data::Structure::Util バージョン 0.15 まで
· HTML::StripScript バージョン 1.05
· List::Gather バージョン 0.08。
死亡記事
リオデジャネイロ在住のダイアナ・ローザさん(27)は、10年2014月XNUMX日に長期休暇に入った。
彼女はラクダのぬいぐるみをいつもコンピューターの画面にぶら下げていました。 彼女は情熱的な人でした
Perl ハッカーはこの言語とそのコミュニティを愛し、Rio.pm イベントを欠かさなかった。
彼女は真のアーティストであり、コードを書いたり、アリアを歌ったり、落書きしたりすることに熱心でした。
壁。 私たちはあなたのことを決して忘れません。
グレッグ・マッキャロルは 28 年 2013 月 XNUMX 日に亡くなりました。
グレッグは多くの正当な理由でよく知られていました。 彼は最初のイベントの主催者の一人でした。
YAPC::Europe、彼は必死に試みた予定外のオークションで終了しました
カンファレンスが損失を出さないように追加の資金を集めます。 間違えたのはグレッグでした
ロンドン午後の会議のため一週間遅れで到着。 数年後、彼はその商品を売った人でした。
YAPC::Europe オークションでの公式会合の日程が決定され、最終的には輝かしい結果に
london.pmのリーダーである彼は、自分が引き起こした不遜な混乱を引き継ぐことになった。
いつも親切で、フレンドリーで、明るく楽観的なので、寂しくなることはありますが、決して寂しくなることはありません
忘れてしまった。
謝辞
Perl 5.20.0は、Perl12および
470,000人の著者からの2,900のファイルにわたる約124行の変更が含まれています。
自動生成されたファイル、ドキュメント、リリースツールを除いて、およそ
280,000の.pm、.t、.c、および.hファイルへの1,800行の変更。
Perlは、活気に満ちたユーザーコミュニティのおかげで、XNUMX年もの間繁栄し続けています。
と開発者。 以下の人々が改善に貢献したことが知られています
Perl 5.20.0になりました:
アーロン・クレーン、アビジット・メノンセン、アビゲイル、アビル・ヴィカール、アラン・ハガイ・アラヴィ、アラン・フーリハネ、
アレクサンダー・ヴォロノフ、アレクサンドル・チョルニー、アンディ・ドハティ、アンノ・シーゲル、アリストテレス・パガルツィス、
アーサー アクセル "fREW" シュミット、ブラッド ギルバート、ブレンダン バード、ブライアン チャイルズ、ブライアン フレイザー、ブライアン
ゴットリュー、クリス 'BinGOs' ウィリアムズ、クリスチャン ミラー、コリン クスキー、クレイグ A. ベリー、ダブリエン
'デイブ' マーフィー、ダグフィン イルマリ マンサーカー、ダニエル ドラガン、ダリン マクブライド、デヴィッド ゴールデン、
デヴィッド・リードビーター、デヴィッド・ミッチェル、デヴィッド・ニコル、デヴィッド・スタインブルナー、デニス・カースメイカー、
ドミニク・ハーグリーブス、エド・エイヴィス、エリック・ブライン、エヴァン・ザックス、クリュソストモス神父、フロリアン・ラグウィッツ、
フランソワ・ペラッド、ギャビン・シェリー、ギデオン・イズラエル・ドゥーザ、ギスル・アス、グラハム・ノップ、H.メリジン
ブランド、ハウク D、ヘイコ アイスフェルト、林 裕夫、ホジュン ユン、ジェームス E キーナン、ジャーッコ
ヒエタニエミ、ジェリー・D・ヘデン、ジェス・ロビンソン、ジェシー・ルーアーズ、ヨハン・ヴロマンス、ジョン・ガーディナー
マイヤーズ、ジョン・グッドイヤー、ジョン・P・リンダーマン、ジョン・ピーコック、カフカ、カンミン・リウ、カレン
エサリッジ、カール・ウィリアムソン、キーディ・キム、ケント・フレドリック、ケビン・ドーソン、ケビン・ファルコーネ、ケビン
ライド、レオン・ティマーマンズ、ルーカス・マイ、マーク・シンプソン、マルセル・グルナウアー、マルコ・ペールブーム、マーカス
ホランド=モリッツ、マーク・ジェイソン・ドミナス、マーティン・マクグラス、マシュー・ホースフォール、マックス・メシェイン、マイク
ドハティ、モーリッツ・レンツ、ネイサン・グレン、ネイサン・トラプッツァーノ、ニール・バウワーズ、ニール・ウィリアムズ、
ニコラス・クラーク、ニールス・ティキエ、ニコ・ティニ、オリヴィエ・メング、オウェイン・G・エインズワース、ポール・グリーン、
ポール・ジョンソン、ピーター・ジョン・アクラム、ピーター・マルティーニ、ピーター・ラビットソン、ペトル・ピサックス、フィリップ
ブーラン、フィリップ・ギュンター、ピョートル・ロザティツキ、ラファエル・ガルシア=スアレス、レイニ・アーバン、ルーベン
トーマス、リカルド・シグネス、ルスラン・ザキロフ、セルゲイ・アレクセーエフ、白方健太郎、シュロミ・フィッシュ、
スレイヴン・レジック、スマイラーズ、ステフェン・ミューラー、スティーブ・ヘイ、サリバン・ベック、トーマス・シブリー、トビアス
リーチ、トビー・インクスター、松野徳弘、トム・クリスチャンセン、トム・ヒューキンス、トニー・クック、ヴィクター
エフィモフ、ヴィクトル・トゥルスキー、ウラジーミル・ティモフェエフ、山科氷魚、イヴ・オートン、ゼフラム、ズバン
アンブルス、アエヴァル・アルンフィヨル・ビャルメイソン。
上記のリストは、から自動的に生成されるため、ほぼ確実に不完全です。
バージョン管理履歴。 特に、(非常に)の名前は含まれていません
感謝)Perlバグトラッカーに問題を報告した寄稿者。
このバージョンに含まれる変更の多くは、に含まれるCPANモジュールに起因します。
Perlのコア。 Perlの繁栄を支援してくれたCPANコミュニティ全体に感謝します。
Perlのすべての歴史的貢献者のより完全なリストについては、以下を参照してください。 作者
Perlソースディストリビューションのファイル。
レポート作成 バグ
バグだと思うものを見つけた場合は、最近投稿された記事を確認してください。
comp.lang.perl.miscニュースグループとperlバグデータベース http://rt.perl.org/perlbug/ .
に情報があるかもしれません http://www.perl.org/ 、Perlホームページ。
報告されていないバグがあると思われる場合は、に含まれているperlbugプログラムを実行してください。
あなたのリリース。 バグを小さいながらも十分なテストケースに切り詰めてください。 あなたのバグ
レポートは、「perl-V」の出力とともに、に送信されます [メール保護] ようにするには
Perl移植チームによって分析されました。
報告しているバグにセキュリティ上の影響がある場合は、
公にアーカイブされたメーリングリストに送信してから、に送信してください
[メール保護]。 これは、閉じられたサブスクリプションのアーカイブされていないメーリングを指します
影響の評価を支援できるすべてのコアコミッターを含むリスト
問題の解決策を見つけ、パッチのリリースを調整するのに役立ちます
Perlがサポートされているすべてのプラットフォームで問題を軽減または修正します。 だけお願いします
モジュールを個別に使用するのではなく、Perlコアのセキュリティ問題にこのアドレスを使用します
CPANで配布されます。
onworks.netサービスを使用してオンラインでperl5200deltaを使用する