/xx
@{^CAPTURE}
, %{^CAPTURE}
, %{^CAPTURE_ALL}
\p{script}
を使うと改良された Script_Extensions 特性を使いますNUL
文字を含む文字列に対するよりよいロケール照合CORE
サブルーチンはリファレンス経由で呼び出せるようになりましたperl5260delta - perl v5.26.0 での変更点
この文書は 5.24.0 リリースと 5.26.0 リリースの変更点を記述しています。
このリリースには広範囲に影響を与える三つの更新を含んでいます:
"."
no longer in @INC
@@@@@@@@@@"."
はもはや @INC
に含まれません
セキュリティ上の理由により、カレントディレクトリ ("."
) はもはや デフォルトでモジュール検索パス (@INC
) の末尾に含まれなくなりました。 これはモジュールのビルド、テスト、インストールと、スクリプトの実行に 広範囲に関連するかもしれません。 完全な詳細については "Removal of the current directory ("."
) from @INC
" の章を 参照してください。
do
may now warn@@@@@@@@@@do
は警告を出すことがあるようになりました
do
は、@INC
に "."
があったときに読み込めていたファイルの読み込みに 失敗したときに廃止予定警告を出すようになりました。
In regular expression patterns, a literal left brace "{"
should be escaped@@@@@@@@@@正規表現中では、リテラルな左中かっこ "{"
はエスケープする必要があります
"Unescaped literal "{"
characters in regular expression patterns are no longer permissible" を 参照してください。
v5.18 で導入された lexical_subs
機能はもはや警告を出さなくなりました。 以前使われていた機能の experimental::lexical_subs
警告カテゴリを無効にした コードはそのまま動作します。 lexical_subs
機能はなんの効果もありません; 全ての Perl コードは、 スコープ内にどの機能宣言があるかどうかに関わらず、レキシカルサブルーチンを 使えます。
ヒヤドキュメントに新しい修飾子 "~"
が追加されました; これはパーサに、 閉じ区切り文字として /^\s*$DELIM\n/
を探すように伝えるものです。
以下の文法全てに対応しています:
<<~EOF;
<<~\EOF;
<<~'EOF';
<<~"EOF";
<<~`EOF`;
<<~ 'EOF';
<<~ "EOF";
<<~ `EOF`;
"~"
修飾子は、ヒヤドキュメントの各行から区切り文字の前にあるのと同じ 空白を取り除きます。
改行はそのままコピーされ、行の先頭に適切な空白を含んでいない場合は perl は croak します。
例えば:
if (1) {
print <<~EOF;
Hello there
EOF
}
これは先頭の空白なしで "Hello there\n" を表示します。
/xx
正規表現を修正するために二つの "x"
文字を指定すると、一つ指定したときの 全ての効果に加えて、大かっこ文字クラスの中の TAB と SPACE は一般的に 無視されるようになるので、次のように可読性を改善するためにこれらを 追加できるようになります: /[ ^ A-Z d-f p-x ]/xx
。 詳細は "/x and /xx" in perlre にあります。
@{^CAPTURE}
, %{^CAPTURE}
, %{^CAPTURE_ALL}
@{^CAPTURE}
は最後のマッチングの捕捉バッファを配列として晒します。 つまり $1
は ${^CAPTURE}[0]
です。 これは substr($matched_string,$-[0],$+[0]-$-[0])
のようなコードと 等価でより効果的で、どちらも $matched_string
を追跡する必要はありません。 この変数には一文字の等価なものはありません。 他の正規表現マジック変数と同様、この変数の内容は動的であることに 注意してください; マッチングの生存期間を超えて値を補完したい場合、 他の配列にコピーしなければなりません。
%{^CAPTURE}
は %+
(つまり、名前付き捕捉) と等価です。 より自己説明的であることを覗いて二つの型式に違いはありません。
%{^CAPTURE_ALL}
は %-
(つまり、全ての名前付き捕捉) と等価です。 より自己説明的であることを覗いて二つの型式に違いはありません。
実験的機能として、Perl は my()
, state()
, our()
, local()
の後にリファレンス演算子を許すようになりました。 この文法は use feature 'declared_refs'
で有効にされなければなりません。 これは実験的で、no warnings 'experimental::refaliasing'
が有効でない限り、 デフォルトで警告が出ます。 これは主にリファレンスへの代入に使うことを意図しています。 例えば:
use experimental 'refaliasing', 'declared_refs';
my \$a = \$b;
より詳しくは "Assigning to References" in perlref を参照してください。
変更の一覧は http://www.unicode.org/versions/Unicode9.0.0/ にあります。 コア Perl と共に出荷されているけれども p5p によって保守されていない モジュールは必ずしも Unicode 9.0 に対応しているとは限りません。 Unicode::Normalize は 9.0 で動作します。
\p{script}
を使うと改良された Script_Extensions 特性を使いますUnicode 6.0 は Script (sc
) 特性の改良された型式を導入しました; これは Script_Extensions (scx
) と呼ばれます。 Perl は、特性を単に \p{script}
として指定された場合はこの 改良版を使うようになりました。 これにより、ある文字が特定の用字で使われているかを判定するプログラムが より正確になるはずですが、特に具体的に古い振る舞いが必要なプログラムを 壊す可能性が僅かにあります。 \p{sc=script}
のような複合形式の意味は変わりません。 "Scripts" in perlunicode を参照してください。
一部のプラットフォームでは UTF-8 ロケールでの照合とソートにおいて 妥当な仕事をしています。 Perl はこれらで動作するようになりました。 移植性と完全な制御のために、Unicode::Collate がまだ推奨されますが、 アプリケーションによっては、十分によい結果を得るために何も特別なことを する必要がなくなったかもしれません。 "Category LC_COLLATE
: Collation: Text Comparisons and Sorting" in perllocale を参照してください。
NUL
文字を含む文字列に対するよりよいロケール照合複数レベルの文字ウェイトを持つロケールでは、NUL
はより高い優先順位の ものでは無視されるようになりました。 しかし、一部の文字列ではまだいくつかのこつがあります。 "Collation of strings containing embedded NUL
characters" in perllocale を 参照してください。
CORE
サブルーチンはリファレンス経由で呼び出せるようになりましたCORE
名前空間でのハッシュと配列の関数 (keys
, each
, values
, push
, pop
, shift
, unshift
, splice
) は アンパサンド文法 (&CORE::keys(\%hash
) とリファレンス経由 (my $k = \&CORE::keys; $k->(\%hash)
) で呼び出せるようになりました。 以前はインライン化される場合にのみ可能でした。
短いキーと長いキーのより良いバランスの性能のために複合ハッシュ関数に 切り替えました。
16 バイト以下の短いキーでは、最適化版の One At A Time Hard を使い、 より長いキーでは Siphash 1-3 を使います。 すごく長いキーの場合、これは性能が大きく改善します。 より短いキーではこれは緩やかな改善です。
@INC
からの現在のディレクトリ ("."
) の除去perl バイナリは @INC
にパスのデフォルト集合を含んでいます。 歴史的に、汚染モード (perl -T
) が有効でない限り、最終的なエントリとして カレントディレクトリ ("."
) も含んでいました。 これは便利ですが、セキュリティ上の問題がありました: 例えば、 カレントディレクトリが(/tmp のように)信頼できない場合、 スクリプトが追加のモジュールを読み込もうとすると、そのディレクトリの下から コードを読み込んで実行する可能性があります。
v5.26 から、"."
は汚染モードの場合だけではなく、常にデフォルトで 除去されるようになりました。 これはモジュールのインストールとスクリプトの実行に大きな影響を与えます。
これらの問題を改善するために、以下の新しい機能が追加されました。
Configure -Udefault_inc_excludes_dot
"."
なしで perl 実行ファイルをビルドするための 新しい Configure オプションである default_inc_excludes_dot
(デフォルトで有効) があります; -U
を使ってアンセットすることで perl は古い振る舞いに戻ります。 これはあなたのパスの問題を修正するかもしれませんが、全てのセキュリティ問題が 再導入されるので、このような問題があなたの環境で問題にならないと言うことに 本当に 自信がない限りこのような perl 実行ファイルをビルドしないでください。
PERL_USE_UNSAFE_INC
これは perl インタプリタによって認識される新しい環境変数です。 perl インタプリタの起動時にこの値が 1 なら、(汚染モードでない限り) "."
が自動的に @INC
に追加されます。
これにより、場合毎に古い perl インタプリタの振る舞いを復元できます。 これは一時的な補助を意図しており、この機能はおそらく将来の perl バージョンで 削除されることに注意してください。 ドットがない状態を扱えるようにまだ更新されていない CPAN モジュールの インストールを容易にするために、これは現在のところ cpan
ユーティリティと Test::Harness
によって設定されています。 再び、これによりセキュリティ問題が再導入されないことに自信がない限り これを使わないでください。
A new deprecation warning issued by do
.@@@@@@@@@@do
によって出力される廃止予定警告。
use
と require
がファイルの読み込みに @INC
を使うことは よく知られていますが、多くの人々は、do "file"
もファイルが相対パスの場合は @INC
を探すことに気付いていません。 "."
の除去によって、単に do "file.pl"
とすると、 現在のディレクトリから file.pl
を読み込んで実行するのに失敗します。 これは一般的に想定された振る舞いなので、 @INC
にドットが含まれていれば見つかるファイルの読み込みに do
が 失敗した場合に新しい廃止予定警告が出力されるようになりました。
新しい型式でソフトウェアが動作するために、スクリプトやモジュールの作者が する必要があるかもしれないことがいくつかあります。
Script authors@@@@@@@@@@スクリプト作者
もし(インクルードしたモジュールの中ではなく)自分自身のコードの中でこれが 問題になるなら、主に二つの選択肢があります。 最初に、あなたのスクリプトが (信頼できるファイルとモジュールが 発見できることが想定される)信頼できるディレクトリの中でのみ実行されるという 自信があるなら、パスに "."
を追加します; 例えば:
BEGIN {
my $dir = "/some/trusted/directory";
chdir $dir or die "Can't chdir to $dir: $!\n";
# safe now
push @INC, '.';
}
use "Foo::Bar"; # may load /some/trusted/directory/Foo/Bar.pm
do "config.pl"; # may load /some/trusted/directory/config.pl
一方、あなたのスクリプトが (/tmp のような) 信頼できないディレクトリの 中で実行されることを意図しているなら、突然ファイルの読み込みに 失敗するようになったのはセキュリティ問題があることを 意味しているかもしれません。 おそらく全ての相対パスをフルパスで置換した方がよいでしょう; 例えば:
do "foo_config.pl"
というのは以下のようにします
do "$ENV{HOME}/foo_config.pl"
スクリプトの読み込みとファイルの実行を現在のディレクトリから 読み込みたいということが完全に確実なら、./
接頭辞を使ってください; 例えば:
do "./foo_config.pl"
Installing and using CPAN modules@@@@@@@@@@CPAN モジュールをインストールして使う
cpan
のような自動化ツールを使って CPAN モジュールをインストールする場合、 このツールはモジュールのビルドとテストの間は 自分自身で PERL_USE_UNSAFE_INC
環境変数を設定します; ドットを認識するように更新されていないディストリビューションを インストールするにはこれで十分でしょう。 もしこのようなモジュールを手動でインストールしたい場合、 次のような伝統的な起動法を置き換える必要があります:
perl Makefile.PL && make && make test && make install
というのは以下のようにします
(export PERL_USE_UNSAFE_INC=1; \
perl Makefile.PL && make && make test && make install)
これは未修正のモジュールのビルドとインストールにのみ助けになることに 注意してください。 (PERL_USE_UNSAFE_INC=1
の基で実行されることになるので) これでテストがパスするようになりますが、モジュール自身の製品版は 正しく動作するのに失敗します。 この場合、修正版のモジュールがリリースされるまでスクリプトを一時的に 修正する必要があるかもしれません。 例えば:
use Foo::Bar;
{
local @INC = (@INC, '.');
# assuming read_config() needs '.' in @INC
$config = Foo::Bar->read_config();
}
これが必要な場合はとても稀です。 再び、これをする場合は、結果のリスクをまず考えてください。
Module Authors@@@@@@@@@@モジュール作者
あなたが CPAN ディストリビューションを保守している場合、ドットなし環境で 実行するように更新する必要があるかもしれません。 cpan
やその他の同様のツールは現在のところモジュールビルド中に PERL_USE_UNSAFE_INC
を設定しますが、 インストールとテスト時に @INC
に "."
があることに依存している モジュールに対する一時的な回避手段であり、より深い問題を 隠してしまうかもしれません。 モジュールがテストとインストールには成功するけれども、実行時に 失敗することになる可能性があります。
ビルド、テスト、インストールの間、あらゆる perl の処理は tar 展開されたディストリビューションのルートディレクトリの中か、 t/ のような既知のサブディレクトリの中で直接実行されるというのは 通常真実です。 Makefile.PL や t/foo.t がこのような直接相対ファイル名を使って ローカルなモジュールや設定ファイルを読み込もうとすると失敗します。
しかし、前述したように、cpan のような自動化ツールは (今のところ) PERL_USE_UNSAFE_INC
環境変数を設定するので、ビルド中ドットが 導入されます。
これによりおそらくあなたの既存のビルド及びテストコードは動作しますが、 これはあなたのコードにある、インストール後使うときのみに明らかになる 問題を隠蔽するかもしれません。 慎重に行くなら、この変数を明示的に無効にしてビルドプロセスを試します:
(export PERL_USE_UNSAFE_INC=0; \
perl Makefile.PL && make && make test && make install)
これはおそらく、あなたのモジュールのビルドプロセスや、モジュール自身の 潜在的な問題を明らかにします。 このような問題を修正したあと、モジュールが再び手動でインストール出来ることと、 PERL_USE_UNSAFE_INC
の補助がなくなってもまだビルドできることを確認します。
@INC
からドットが除去されたことによるテストの問題を修正するとき、 @INC
にドットを再挿入するのは慎重に行うべきです、 これも実行時コードの実際の問題を抑制するかもしれないからです。 可能な限り、明示的な絶対/相対パスを使うという前述した手法を適用するか、 必要なファイルをサブディレクトリに再配置して、代わりに そのサブディレクトリを @INC
に追加することを勧めます。
もしあなたのランタイムコードがドットなしの @INC
で問題があるなら、 前述したスクリプト作者のための修正方法のコメントを普通はここでも適用します。 しかし、モジュールにとってグローバルに @INC
にドットを追加するのは 悪い型式であると言うことを心に留めてください; これは前述したように、 セキュリティリスクおよび間違って @INC
にドットを要求しているという 問題を隠蔽するからです。
Unix システムでは、Perl は新しいプロセスが開始するときに PATH
環境変数の 全ての相対パスを汚染されているものとして扱います。 以前は、(OS と違って) コロンを逆スラッシュでエスケープすることができ、 結果として PATH に /\:.
のようなものが設定されている場合に 相対パスを安全なものとして扱うことができました。 このチェックは修正され、この例では "."
を汚染されているものとして 扱うようになりました。
-Di
オプションが必要になりましたこれは再帰呼び出しを避けるために PerlIO の中のコードをデバッグするために 使われています。 以前は、perl が setuid 付きで実行されておらず、-T
or -t
オプションが まだパースされていない場合は、この出力は PERLIO_DEBUG
環境変数で 指定されたファイルに送られていました。
まだこのオプションがパースされていない時点で perl が出力を行うとき、 これにより、たとえ -T
オプションが指定されていても、perl が PERLIO_DEBUG
の名前のファイルを作ったり上書きすることがありました。
Perl は PerlIO デバッグ出力を行う前に -Di
オプションがあることを 要求するようになりました。 デフォルトではこれは stderr
に書き込まれますが、 オプションとして PERLIO_DEBUG
環境変数を設定することでファイルに リダイレクトすることができます。
perl が setuid 付きで実行されているか -T
オプションが指定されている場合、 PERLIO_DEBUG
は無視されて、デバッグ出力はその他の -D
オプションと同様 stderr
に送られます。
"{"
文字はもはや許されなくなりましたLEFT CURLY BRACKET にマッチングするためには "\{"
や "[{]"
のように 指定する必要があるようになりました; さもなければ、致命的なパターンコンパイルエラーとなります。 この変更により、将来の言語拡張を可能にします。
これらは v5.16 から廃止予定で、一部の使用法では v5.22 から廃止予定 メッセージが発生していました。 残念ながら、メッセージを発生されるために追加されたコードにはバグがあり、 警告するべき場合の一部で警告できていませんでした。 従って、これらの場合のこの廃止の強制は Perl 5.30 まで延期されますが、 このようなコードはデフォルトでオンの廃止予定メッセージが出力されるように 修正されました。
パターンの先頭の文字や、代替を意味する "|"
の直後のような、 リテラルとして以外の意味を予測することができない位置でのリテラルな "{"
の使用も起こります。 従って
qr/{fee|{fie/
というのは {fee
と {fie
のどちらかの文字列にマッチングします。 不必要なコード変更の強制を避けるために、これらの使用法では エスケープする必要はなく、これらに関する警告は発生せず、 現在これを変更する予定はありません。
しかし、"{"
をエスケープするのは常に正しく、覚えておくべき単純な規則は、 常にそうすることです。
Unescaped left brace in regex is illegal here を 参照してください。
scalar(%hash)
返り値シグネチャの変更scalar(%hash)
の返り値はもはやハッシュで割り当てられたバケツに関する 情報ではなくなりました。 これは単に使ったキーのカウントを返します。 従ってこれは 0+keys(%hash)
と等価です。
後方互換性の型式は、Perl 5.24 以前のが提供する scalar(%hash)
と 同じ振る舞いを提供する Hash::Util::bucket_ratio()
経由で提供されます。
keys
左辺値サブルーチンから返される keys
はリストコンテキストでは 代入されなくなりました。
sub foo : lvalue { keys(%INC) }
(foo) = 3; # death
sub bar : lvalue { keys(@_) }
(bar) = 3; # also an error
これにより、左辺値サブルーチンの場合は、 同様にエラーである (keys %hash) = ...
や (keys @_) = ...
と 一貫性を持つようになりました。 [perl #128187]
${^ENCODING}
機能は除去されましたこの変数へ値を代入することと関連付けられている特別な振る舞いは除去されました。 結果として、encoding プラグマのデフォルトモードはもはやサポートされません。 まだ UTF-8 以外のエンコーディングでソースコードを書く必要がある場合は、 CPAN の Filter::Encoding や encoding の Filter
のような ソースフィルタを使ってください。
POSIX::tmpnam()
は除去されました基本的に安全でない tmpnam()
インターフェースは Perl 5.22 で廃止予定に なりましたが、今回除去されました。 このような場合、例えば、File::Temp インターフェースを使えます。
以前は、require ::Foo::Bar
は /Foo/Bar.pm を読み込もうとしていました。 コロン二つで始まる裸の単語の require は全て die するようになりました。
変数名には、どのような場合でもリテラル名制御文字を含むことは できなくなりました。 以前は ASCII プラットフォームでの 1 文字名は許されていましたが、 Perl 5.20 から廃止予定でした。 これは $\cT
のようなもの (\cT はソースコード中のリテラルな 制御文字 (NAK
や NEGATIVE ACKNOWLEDGE
文字)) に影響します。
\N{...}
内での NBSP
はもはや許されなくなりました文字の名前にはもはやノンブレークスペースを含むことができなくなりました。 これは Perl 5.22 から廃止予定になっていました。
Perl が最終的に書記素クラスタ (単一の文字のように見えるけれども複数の文字の 並びであるもの) を文字列区切りとして認めるようになるためには、 それ自身が書記素でない単一区切り文字を許すのを止める必要がありました。 これらは実際のコードではありそうにありません; これらは典型的には ある文字の前に付いているものだからです。
\cX
はもはや廃止予定ではなくなりましたつまり、この機能を除去する予定はありません。 これはまだ警告を出しますが、文法警告が有効の場合のみです。 この機能は元々ニーモニックを持たない非表示文字を表現するための方法を 意図していました (\t
と \n
は二つの非表示文字のための ニーモニックでしたが、ほとんどの非表示文字にはニーモニックがありません)。 しかし、この機能はより明らかに、いくつかの表示可能な文字を指定するために 使われています; http://www.nntp.perl.org/group/perl.perl5.porters/2017/02/msg242944.html を参照してください。
ブール値コンテキストでのハッシュは時々より早くなりました; 例えば
if (!%h) { ... }
これは既に特別扱いしていましたが、grep %$_, @AoH
のような) 一部の場合が 漏れていました; 以前は特別扱いしていなかった場合も改善されました。
New Faster Hash Function on 64 bit builds@@@@@@@@@@64 ビットビルドでの新しいより良いハッシュ関数
短いキーと長いキーで異なるハッシュ関数を使います。 これにより性能とセキュリティが、特に長いキーで改善するはずです。
readline is faster@@@@@@@@@@readline はより速くなりました
readline()
や <>
を使った 1 行ずつのファイル読み込みは、 次の改行文字を検索するコードの実装の改良により、典型的には 高速になっているはずです。
あるリファレンスから別のリファレンスへの代入、例えば $ref1 = $ref2
は 一部の場合で最適化されるようになりました。
Copy-on-Write 文字列の作成時のいくつかの例外を除去しました。 文字列バッファを拡大するアルゴリズムは少し変更されたので、 COW できない文字列に出会うことはより少なくなりました。
配列とハッシュの代入の最適化の改善: where an array or hash appears in the LHS of a list assignment, such as (..., @a) = (...);
のように、リスト代入の左側に配列やハッシュがある場合、 特にこれが配列/ハッシュを空にすることに関連する場合、おそらくかなり 早くなりました。 例えば、このコードは Perl 5.24.0 と比べて約 3 倍高速に実行します:
my @a;
for my $i (1..10_000_000) {
@a = (1,2,3);
@a = ();
}
数字 1 桁の文字列から数値への変換は大幅に速くなりました。
split
組み込み関数は、多くの場合(特に二つの特別扱いされる型式)で少し 速くなりました:
my @a = split ...;
local @a = split ...;
実験的なサブルーチンシグネチャ機能のやや遅い実装は遥かに速くなりました; 伝統的な my ($a, $b, @c) = @_
と速度を比較できる程度になりました。
裸の単語の文字列定数は定数畳み込みの一部として許されるようになりました。 これはもともと use strict "subs"
が裸の単語の定数にも適用されるように、 Perl 5.6 開発中の 1999 年 8 月から定数畳み込みから免除されていました。 これは異なった方法で実現されることになったので、裸の単語も他の定数と同様に 定数畳み込みによる性能的な利益を得られるようになりました。
これはまた、裸の単語の定数表現での無効コンテキスト警告は 操作ではなく畳み込まれた定数オペランドを報告するようになったことを意味します; これは裸の単語の定数の振る舞いと一致します。
IO::Compress はバージョン 2.069 から 2.074 に更新されました。
Archive::Tar はバージョン 2.04 から 2.24 に更新されました。
arybase はバージョン 0.11 から 0.12 に更新されました。
attributes はバージョン 0.27 から 0.29 に更新されました。
:unique
と :locked
属性の廃止予定メッセージは、これらが Perl 5.28 で 消えることに言及するようになりました。
B はバージョン 1.62 から 1.68 に更新されました。
B::Concise はバージョン 0.996 から 0.999 に更新されました。
この出力は op_private
フラグについてより説明的になりました。
B::Debug はバージョン 1.23 から 1.24 に更新されました。
B::Deparse はバージョン 1.37 から 1.40 に更新されました。
B::Xref はバージョン 1.05 から 1.06 に更新されました。
2 引数 open()
ではなく 3 引数 open()
を使うようになりました。 [perl #130122]
base はバージョン 2.23 から 2.25 に更新されました。
bignum はバージョン 0.42 から 0.47 に更新されました。
Carp はバージョン 1.40 から 1.42 に更新されました。
charnames はバージョン 1.43 から 1.44 に更新されました。
Compress::Raw::Bzip2 はバージョン 2.069 から 2.074 に更新されました。
Compress::Raw::Zlib はバージョン 2.069 から 2.074 に更新されました。
Config::Perl::V はバージョン 0.25 から 0.28 に更新されました。
CPAN はバージョン 2.11 から 2.18 に更新されました。
CPAN::Meta はバージョン 2.150005 から 2.150010 に更新されました。
Data::Dumper はバージョン 2.160 から 2.167 に更新されました。
XS 実装は Deparse に対応するようになりました。
DB_File はバージョン 1.835 から 1.840 に更新されました。
Devel::Peek はバージョン 1.23 から 1.26 に更新されました。
Devel::PPPort はバージョン 3.32 から 3.35 に更新されました。
Devel::SelfStubber はバージョン 1.05 から 1.06 に更新されました。
2 引数 open()
ではなく 3 引数 open()
を使うようになりました。 [perl #130122]
diagnostics はバージョン 1.34 から 1.36 に更新されました。
2 引数 open()
ではなく 3 引数 open()
を使うようになりました。 [perl #130122]
Digest はバージョン 1.17 から 1.17_01 に更新されました。
Digest::MD5 はバージョン 2.54 から 2.55 に更新されました。
Digest::SHA はバージョン 5.95 から 5.96 に更新されました。
DynaLoader はバージョン 1.38 から 1.42 に更新されました。
Encode はバージョン 2.80 から 2.88 に更新されました。
encoding はバージョン 2.17 から 2.19 に更新されました。
このモジュールのデフォルトモードはもはやサポートされなくなりました。 Filter
オプションが使われない限り、インポートされたときに die するようになりました。
encoding::warnings はバージョン 0.12 から 0.13 に更新されました。
このモジュールはもはやサポートされません。 この効果と、従って何もしないという警告を出力します。
Errno はバージョン 1.25 から 1.28 に更新されました。
%!
を使うと Errno を読み込むことが文書化されました。
2 引数 open()
ではなく 3 引数 open()
を使うようになりました。 [perl #130122]
ExtUtils::Embed はバージョン 1.33 から 1.34 に更新されました。
2 引数 open()
ではなく 3 引数 open()
を使うようになりました。 [perl #130122]
ExtUtils::MakeMaker はバージョン 7.10_01 から 7.24 に更新されました。
ExtUtils::Miniperl はバージョン 1.05 から 1.06 に更新されました。
ExtUtils::ParseXS はバージョン 3.31 から 3.34 に更新されました。
ExtUtils::Typemaps はバージョン 3.31 から 3.34 に更新されました。
feature はバージョン 1.42 から 1.47 に更新されました。
File::Copy はバージョン 2.31 から 2.32 に更新されました。
File::Fetch はバージョン 0.48 から 0.52 に更新されました。
File::Glob はバージョン 1.26 から 1.28 に更新されました。
File::Glob::glob()
の廃止予定メッセージを出力するようになりました。
File::Spec はバージョン 3.63 から 3.67 に更新されました。
FileHandle はバージョン 2.02 から 2.03 に更新されました。
Filter::Simple はバージョン 0.92 から 0.93 に更新されました。
もはや no MyFilter
の直後の use MyFilter
をファイル末尾として 扱わなくなりました。 [perl #107726]
Getopt::Long はバージョン 2.48 から 2.49 に更新されました。
Getopt::Std はバージョン 1.11 から 1.12 に更新されました。
Hash::Util はバージョン 0.19 から 0.22 に更新されました。
HTTP::Tiny はバージョン 0.056 から 0.070 に更新されました。
内部の 599 シリーズエラーはリダイレクト履歴を含むようになりました。
I18N::LangTags はバージョン 0.40 から 0.42 に更新されました。
2 引数 open()
ではなく 3 引数 open()
を使うようになりました。 [perl #130122]
IO はバージョン 1.36 から 1.38 に更新されました。
IO::Socket::IP はバージョン 0.37 から 0.38 に更新されました。
IPC::Cmd はバージョン 0.92 から 0.96 に更新されました。
IPC::SysV はバージョン 2.06_01 から 2.07 に更新されました。
JSON::PP はバージョン 2.27300 から 2.27400_02 に更新されました。
lib はバージョン 0.63 から 0.64 に更新されました。
2 引数 open()
ではなく 3 引数 open()
を使うようになりました。 [perl #130122]
List::Util はバージョン 1.42_02 から 1.46_02 に更新されました。
Locale::Codes はバージョン 3.37 から 3.42 に更新されました。
Locale::Maketext はバージョン 1.26 から 1.28 に更新されました。
Locale::Maketext::Simple はバージョン 0.21 から 0.21_01 に更新されました。
Math::BigInt はバージョン 1.999715 から 1.999806 に更新されました。
Math::BigInt::FastCalc はバージョン 0.40 から 0.5005 に更新されました。
Math::BigRat はバージョン 0.260802 から 0.2611 に更新されました。
Math::Complex はバージョン 1.59 から 1.5901 に更新されました。
Memoize はバージョン 1.03 から 1.03_01 に更新されました。
Module::CoreList はバージョン 5.20170420 から 5.20170530 に更新されました。
Module::Load::Conditional はバージョン 0.64 から 0.68 に更新されました。
Module::Metadata はバージョン 1.000031 から 1.000033 に更新されました。
mro はバージョン 1.18 から 1.20 に更新されました。
Net::Ping はバージョン 2.43 から 2.55 に更新されました。
その他の拡張と共に、IPv6 アドレスと AF_INET6
ソケットに 対応するようになりました。
NEXT はバージョン 0.65 から 0.67 に更新されました。
Opcode はバージョン 1.34 から 1.39 に更新されました。
open はバージョン 1.10 から 1.11 に更新されました。
OS2::Process はバージョン 1.11 から 1.12 に更新されました。
2 引数 open()
ではなく 3 引数 open()
を使うようになりました。 [perl #130122]
overload はバージョン 1.26 から 1.28 に更新されました。
コンパイル速度が少し向上しました。
parent はバージョン 0.234 から 0.236 に更新されました。
perl5db.pl はバージョン 1.50 から 1.51 に更新されました。
非 Unix システムでは /dev/tty を無視するようになりました。 [perl #113960]
Perl::OSType はバージョン 1.009 から 1.010 に更新されました。
perlfaq はバージョン 5.021010 から 5.021011 に更新されました。
PerlIO はバージョン 1.09 から 1.10 に更新されました。
PerlIO::encoding はバージョン 0.24 から 0.25 に更新されました。
PerlIO::scalar はバージョン 0.24 から 0.26 に更新されました。
Pod::Checker はバージョン 1.60 から 1.73 に更新されました。
Pod::Functions はバージョン 1.10 から 1.11 に更新されました。
Pod::Html はバージョン 1.22 から 1.2202 に更新されました。
Pod::Perldoc はバージョン 3.25_02 から 3.28 に更新されました。
Pod::Simple はバージョン 3.32 から 3.35 に更新されました。
Pod::Usage はバージョン 1.68 から 1.69 に更新されました。
POSIX はバージョン 1.65 から 1.76 に更新されました。
シンボルをエクスポート可能にするときのいくつかの不具合を修正しました。 [perl #127821]
POSIX::tmpnam()
インターフェースは除去されました; "POSIX::tmpnam() has been removed" を参照してください。
以下の廃止予定関数が除去されました:
POSIX::isalnum
POSIX::isalpha
POSIX::iscntrl
POSIX::isdigit
POSIX::isgraph
POSIX::islower
POSIX::isprint
POSIX::ispunct
POSIX::isspace
POSIX::isupper
POSIX::isxdigit
POSIX::tolower
POSIX::toupper
(POSIX::atend()
のように)実際の実装がない POSIX 関数を インポートしようとすると、実行時まで待つのではなく、インポート時に 失敗するようになりました。
re はバージョン 0.32 から 0.3 に更新されました。
これは新しい /xx
正規表現パターン修飾子 対応を追加し、use re 'strict'
実験的機能に 変更します。 re 'strict'
が有効のとき、正規表現中のリテラルに取られる (大かっこ文字クラスの外側の) 二つの文字 "}"
と "]"
をエスケープせずに 使うと全て警告が出力されます。 これにより、エスケープしない限り常にメタ文字として扱われる ")"
文字と さらに一致します。 遠い位置の行動に依存して時々メタ文字になるというのは、パターンが暗黙の内に 想定とかなり違う何かになる可能性があります; re 'strict'
モードはこれを最小化することを意図しています。
Safe はバージョン 2.39 から 2.40 に更新されました。
Scalar::Util はバージョン 1.42_02 から 1.46_02 に更新されました。
Storable はバージョン 2.56 から 2.62 に更新されました。
[perl #130098] を 修正しました。
Symbol はバージョン 1.07 から 1.08 に更新されました。
Sys::Syslog はバージョン 0.33 から 0.35 に更新されました。
Term::ANSIColor はバージョン 4.04 から 4.06 に更新されました。
Term::ReadLine はバージョン 1.15 から 1.16 に更新されました。
2 引数 open()
ではなく 3 引数 open()
を使うようになりました。 [perl #130122]
Test はバージョン 1.28 から 1.30 に更新されました。
2 引数 open()
ではなく 3 引数 open()
を使うようになりました。 [perl #130122]
Test::Harness はバージョン 3.36 から 3.38 に更新されました。
Test::Simple はバージョン 1.001014 から 1.302073 に更新されました。
Thread::Queue はバージョン 3.09 から 3.12 に更新されました。
Thread::Semaphore はバージョン 2.12 から 2.13 に更新されました。
down_timed
メソッドを追加しました。
threads はバージョン 2.07 から 2.15 に更新されました。
threads::shared はバージョン 1.51 から 1.56 に更新されました。
Tie::Hash::NamedCapture はバージョン 0.09 から 0.10 に更新されました。
Time::HiRes はバージョン 1.9733 から 1.9741 に更新されました。
(G++ 6 や Clang++ 3.9 のような) C++11 コンパイラのシステムで ビルドできるようになりました。
clockid_t
を使うようになりました。
Time::Local はバージョン 1.2300 から 1.25 に更新されました。
Unicode::Collate はバージョン 1.14 から 1.19 に更新されました。
Unicode::UCD はバージョン 0.64 から 0.68 に更新されました。
2 引数 open()
ではなく 3 引数 open()
を使うようになりました。 [perl #130122]
version はバージョン 0.9916 から 0.9917 に更新されました。
VMS::DCLsym はバージョン 1.06 から 1.08 に更新されました。
2 引数 open()
ではなく 3 引数 open()
を使うようになりました。 [perl #130122]
warnings はバージョン 1.36 から 1.37 に更新されました。
XS::Typemap はバージョン 0.14 から 0.15 に更新されました。
XSLoader はバージョン 0.21 から 0.27 に更新されました。
バイナリファイルが @INC
の外側のパスから読み込まれる 可能性があるセキュリティホールが修正されました。
2 引数 open()
ではなく 3 引数 open()
を使うようになりました。 [perl #130122]
このファイルは全ての将来の廃止予定、および既に除去された廃止予定の一部を 文書化しています。 この文書の目的は二つです: 何がどのバージョンから除去されたのかを文書化することと、perl の アップグレード後に動作しなくなる機能があるコードを扱う人々へのガイドを 提供することです。
私たちはこの文書にリストされた修正を反映するように文書を 更新しようとしています。 もし見逃しているものに気付いたなら、 perlbug@perl.org にメールを送ってください。
さらに、全ての Usenet への参照は取り除かれ、また以下に抜粋した変更が 行われました:
集合に対する defined()
に関する古い文章が 除去されました; これは機能が除去された時点でもっと早く削除されるべきでした。
eval()
と evalbytes()
の 文書が修正されました。
位置はバイト単位であって文字単位ではないことを強調するために、 seek()
, tell()
, sysseek()
の文書を明確化しました。 [perl #128607]
変数 $a
と $b
に関する sort()
の文書が 明確化されました。
split()
で、一部のパターン修飾子は正当であることが 記され、これを v5.11 以前の Perl で使うことに関する注意が追加されました。
study()
の古い文書が除去され、今は何もしないことが 記されました。
符号位置が 255 を越える文字が含まれている文字列に対しては vec()
がうまく動作しないことが記されました。
Size_t
と SSize_t
のオペランドのフォーマット表示 に 助言が追加されました。
どのエディタタブストップ規則を使うかを明確化し、タブを使わずに SPACE 文字の 並びに置き換えようとしていることを記しました。
式をブール値にキャストするために cBOOL
を使うもう一つの理由を 提供しました。
TRUE
と FALSE
はブール値を表現するのに利用可能であることを 記述しました。
perlinterp は、演算子がどのように扱われるかについてパーサを追う方法に関する より詳細な例を追加することで拡張されました。
一部のロケールは Perl と互換性がありません。 これらはコアダンプを引き起こすことを記述しました。
様々な明確化が追加されました。
サイトミラーの一覧を更新しました。
完全修飾名を使ったメソッド呼び出しの章を追加しました。
手動の @ISA
は非推奨ではありません。
Moo
についてさらに言及しました。
区切り文字が単語文字 (つまり、\w
にマッチングする文字) の場合、 クォート演算子として空白を使わなければならないことを記述しました。
シングルクォートで区切られた正規表現パターンでは変数展開が行われないことを 明確化しました。
最初の部分は様々な基本的な点が組み入れられるように広範囲に書き直されました; 以前のバージョンでは、第 8 版正規表現の付録で言及されていたようなものです。
/x
修飾子を使って、これは "#"
をエスケープする必要があることを 忘れることがよくあることを記しました。
導入的な内容が追加されました。
その意味を持てないコンテキストにメタ文字があると、暗黙にメタの意味が 失われリテラルにマッチングすることを記しました。 use re 'strict'
はこの一部を捕らえます。
Unicode のバイト順マークの扱いに関する文章が修正されました。
Unicode UTS#18 の変更に対応した文章、正規表現の考慮、書いてあることの Perl との互換性について更新されました。
@ISA
が文書化されました。 これは他の場所はに文書化されていましたが、perlvar にはありませんでした。
Bareword in require must not start with a double-colon: "%s"
(A) 間違って Perl ではなく bash やその他のシェルでスクリプトを 実行しました。 #!
行をチェックするか、手動で Perl にスクリプトを指定してください。 ファイルの先頭の #!
行は次のようなものです:
#!/usr/bin/perl
(A) 間違って Perl ではなく zsh やその他のシェルでスクリプトを 実行しました。 #!
行をチェックするか、手動で Perl にスクリプトを指定してください。 ファイルの先頭の #!
行は次のようなものです:
#!/usr/bin/perl
The experimental declared_refs feature is not enabled
(F) my \%x
のように変数へのリファレンスを宣言するためには、最初に この機能を有効にしなければなりません:
no warnings "experimental::declared_refs";
use feature "declared_refs";
"Declaring a reference to a variable" を参照してください。
Infinite recursion via empty pattern.
あるコードブロックの他の正規表現で (/(?{ s!!new! })/
のように) 空パターンを使う(最後にマッチングに成功したパターンを再実行する)と、 以前は常にセグメンテーションフォルトになっていました。 今回はこのエラーが出るようになりました。
'#'
not allowed immediately following a sigil in a subroutine signature
Unescaped left brace in regex is illegal here
正規表現パターンの一部のコンテキストでは、エスケープされていない 左中かっこは不正になりました。 その他のコンテキストでは、まだ単なる廃止予定です; これは Perl 5.30 で不正になります。
Version control conflict marker
(F) パーサは <<<<<<<
, >>>>>>>
, =======
で始まる行を発見しました。 これはマージ操作に失敗した後衝突をマークするために バージョンコントロールシステムが残した可能性があります。
Declaring references is experimental
(S experimental::declared_refs) この警告は、my()
, state()
, our()
, local()
の右側でリファレンスコンストラクタを使ったときに起こります。 この機能を使用したいけれども、そうすることで将来の Perl バージョンで 変更や削除される可能性がある実験的な機能を使うリスクを取る場合は、 単に警告を抑制してください:
no warnings "experimental::declared_refs";
use feature "declared_refs";
$fooref = my \$foo;
"Declaring a reference to a variable" を参照してください。
do "%s" failed, '.' is no longer in @INC
デフォルトでは "."
が @INC
から除去されたので、 do
は do
文を修正することを勧める警告を出すようになりました。
File::Glob::glob()
will disappear in perl 5.30. Use File::Glob::bsd_glob()
instead.
Unescaped literal '%c' in regex; marked by <-- HERE in m/%s/
"Deprecations" を参照してください。
require
がモジュールのためではなくファイルのための場合、 require
が失敗したときに @INC
を提供しなくなりました。
require
呼び出しで @INC
を調べない場合、混乱を防ぐために もはや @INC
を表示しなくなりました。
Attribute "locked" is deprecated, and will disappear in Perl 5.28
この既存の警告は、このリリースから and will disappear という文章が 追加されました。
Attribute "unique" is deprecated, and will disappear in Perl 5.28
この既存の警告は、このリリースから and will disappear という文章が 追加されました。
Calling POSIX::%s() is deprecated
廃止予定の関数が POSIX から除去されたので、この警告は除去されました。
この既存の警告は、このリリースから this will not be allowed という文章が 追加されました。
Deprecated use of my()
in false conditional. This will be a fatal error in Perl 5.30
この既存の警告は、このリリースから this will be a fatal error という文章が 追加されました。
dump()
better written as CORE::dump()
. dump()
will no longer be available in Perl 5.30
この既存の警告は、このリリースから no longer be available という文章が 追加されました。
Experimental %s on scalar is now forbidden
このメッセージは、より助けになる文章が引き続くようになりました。 [perl #127976]
Experimental "%s" subs not enabled
レキシカルサブルーチンはもはや実験的ではなくなったので、この警告は 除去されました。
Having more than one /%c regexp modifier is deprecated
/xx
は新しい意味を持つようになったので、廃止予定警告は除去されました。
%s() is deprecated on :utf8
handles. This will be a fatal error in Perl 5.30 .
ここで "%s" は sysread
, recv
, syswrite
, send
のいずれかです。
この既存の警告は、このリリースから this will be a fatal error という文章が 追加されました。
この警告は、全ての deprecated
カテゴリの警告がそうであるべきように、 デフォルトで有効になりました。
$*
is no longer supported. Its use will be fatal in Perl 5.30
この既存の警告は、このリリースから its use will be fatal という文章が 追加されました。
$#
is no longer supported. Its use will be fatal in Perl 5.30
この既存の警告は、このリリースから its use will be fatal という文章が 追加されました。
正確な問題のための詳細がメッセージの末尾に追加されました
Missing or undefined argument to %s
この警告は、実際に実行されたのが do
であっても、require
に関して 警告していました。 これは正しく実装した名前を使うようになりました。
NO-BREAK SPACE in a charnames alias definition is deprecated
この振る舞いはエラーになったので、この警告は除去されました。
Odd name/value argument for subroutine '%s'
この警告は問題のあるサブルーチンの名前を含むようになりました。
Opening dirhandle %s also as a file. This will be a fatal error in Perl 5.28
この既存の警告は、このリリースから this will be a fatal error という文章が 追加されました。
Opening filehandle %s also as a directory. This will be a fatal error in Perl 5.28
この既存の警告は、このリリースから this will be a fatal error という文章が 追加されました。
panic: ck_split, type=%u
panic: pp_split, pm=%p, s=%p
これらの panic エラーは除去されました。
Passing malformed UTF-8 to "%s" is deprecated
この警告は致命的な Malformed UTF-8 string in "%s" に変更されました。
この既存の警告は、このリリースから this will be fatal という文章が 追加されました。
${^ENCODING}
is no longer supported. Its use will be fatal in Perl 5.28
この警告は以下のような形でした: "Setting ${^ENCODING}
is deprecated"
${^ENCODING}
変数の特別な行動は以前は encoding
プラグマの実装に 使われていました。 Perl 5.26 から、廃止予定にするのではなく、この変数への代入は 警告が発生する以外に何の効果もないようになりました。
Too few arguments for subroutine '%s'
この警告は問題のあるサブルーチンの名前を含むようになりました。
Too many arguments for subroutine '%s'
この警告は問題のあるサブルーチンの名前を含むようになりました。
この既存の警告は、このリリースから here (and will be fatal...) という文章が 追加されました。
Unknown charname '' is deprecated. Its use will be fatal in Perl 5.28
この既存の警告は、このリリースから its use will be fatal という文章が 追加されました。
Use of bare << to mean <<"" is deprecated. Its use will be fatal in Perl 5.28
この既存の警告は、このリリースから its use will be fatal という文章が 追加されました。
Use of code point 0x%s is deprecated; the permissible max is 0x%s. This will be fatal in Perl 5.28
この既存の警告は、このリリースから this will be fatal という文章が 追加されました。
Use of comma-less variable list is deprecated. Its use will be fatal in Perl 5.28
この既存の警告は、このリリースから its use will be fatal という文章が 追加されました。
Use of inherited AUTOLOAD
for non-method %s() is deprecated. This will be fatal in Perl 5.28
この既存の警告は、このリリースから this will be fatal という文章が 追加されました。
この既存の警告は、このリリースから this will be a fatal error という文章が 追加されました。
これらの古いツールは h2xs に置き換えられて長い時間が経っています; そして 今回配布から取り除かれました。
誤った実行ビットが除去されました。
DOS ファイル終端の可能性を考慮するようになりました。
多くの改良が行われました。
ファイルが整理され、一部のシンボルの名前が変わりました。
不明瞭な文字範囲が \w
で置き換えられました。
テストに失敗したときにより助けになろうとするようになりました。
enum の無限ループが回避されました。
メッセージ本体の長い行は 900 文字でラップされるようになりました; SMTP メール転送エージェントに課されている 1000 文字制限に余裕を持って 納めるためです。 これは特に、Configure への引数のリストで重要です; 例えば、複数の非デフォルトインストールパスを指定するとすぐに制限を 超えることがあるからです。 この変更により perlbug への最初の単体テストが追加されました。 [perl #128020]
-Ddefault_inc_excludes_dot
が追加され、デフォルトで有効になりました。
dtrace
ビルドプロセスはさらに変更されました: [perl #130108]:
-xnolibs
が有効なら、これを使うので、dtrace perl は FreeBSD jail の中でビルド出来るようになります。
dtrace オブジェクトファイルをビルドするシステム (FreeBSD, Solaris, SystemTap の dtrace エミュレーション) では、 入力オブジェクトを別のディレクトリにコピーしてそこで処理し、 リンク時にそのオブジェクトを使うようになりました; なぜなら dtrace -G
もこれらのオブジェクトを変更するからです。
FreeBSD 10.x でビルドするために libelf を追加します; dtrace は libelf シンボルへの参照を追加するからです。
dtrace -G
がビルドに失敗すると、ダミーの dtrace_main.o を生成します。 Solaris のデフォルトビルドは未使用のインライン関数からのプローブを 生成する一方、FreeBSD では生成しないので dtrace -G
が失敗します。
perl を -Accflags=NO_PERL_HASH_ENV
と設定することで、 perl が PERL_HASH_SEED
と PERL_PERTURB_KEYS
環境変数を使うのを 無効化できるようになりました。
perl を -Accflags=-DNO_PERL_HASH_SEED_DEBUG
と設定することで、 perl が PERL_HASH_SEED_DEBUG
環境変数を使うのを 無効化できるようになりました。
Configure は、より再現可能なビルドを行うために、 80 ビット NaN
と Inf
のバイトを計算するときにアライメントバイトを ゼロにするようになりました。 [perl #130133]
v5.18 から、テストのために私たちは様々な非標準で非推奨なハッシュ関数を 使った perl のビルド対応を含んでいました。 私たちはこれらの関数の使用を勧めていないので、これらと対応する ビルドオプションを除去しました。 特に、これには以下のビルドオプションを含みます:
PERL_HASH_FUNC_SDBM
PERL_HASH_FUNC_DJB2
PERL_HASH_FUNC_SUPERFAST
PERL_HASH_FUNC_MURMUR3
PERL_HASH_FUNC_ONE_AT_A_TIME
PERL_HASH_FUNC_ONE_AT_A_TIME_OLD
PERL_HASH_FUNC_MURMUR_HASH_64A
PERL_HASH_FUNC_MURMUR_HASH_64B
"Warning: perl appears in your path" の除去
このインストール警告は多かれ少なかれ古いものです; ほとんどのプラットフォームでは既に OS によって提供されている /usr/bin/perl のようなものが ある からです。
make install.man
の詳細度の減少
以前は、二つの進捗メッセージがそれぞれの man ページに出力されていました; 一つは installman 自身、もう一つは実際にファイルをインストールするために 呼び出される install_lib.pl の関数によるものです。 それぞれの場合で二つ目を無効にすることで助けにならない 750 行以上の 出力が省略されました。
clang -Weverything
対応のための整理。 [perl #129961]
Configure: 符号ミットのスキャンは多くを仮定しすぎていました; 負の 0 を仮定するのを止めました。
様々なコンパイラ警告が黙らされました。
C+11 でコンパイルするための障害を除去するためのいくつかの小さな変更が 行われました。
USE_PAD_RESET
を使ったビルドは再び動作するようになりました; この設定は少しおかしくなっていました。
gai_strerror()
ルーチンが利用可能で、getaddrinfo()
から返された エラーコードから人間可読な文字列への変換に使えるかどうかをチェックする gai_strerror
プローブが Configure に追加されました。
Configure は、-Duselongdouble
と -Dusequadmath
の両方が 要求された場合は中断するようになりました。 [perl #126203]
Configure が、既に存在していても archname に -quadmath
を 追加することがあるバグが修正されました。 [perl #128538]
-DPERL_GLOBAL_STRUCT
や -DPERL_GLOBAL_STRUCT_PRIVATE
での Clang のビルドが (これらの設定での Thread Safety Analysis を 無効にすることで) 修正されました。
make_ext.pl は、必要なファイルが更新されていない場合は、 モジュールの pm_to_blib ファイルを更新しなくなりました。 これにより、依存ファイル、特に perlmain.c が不必要に 再ビルドされることがありました。 [perl #126710]
perl -V
の出力が再構成され、可読性の向上のために、各設定 とコンパイル時オプションが 1 行に一つずつ出力されるようになりました。
Configure が -Dusecrosscompiler
ありかつ -Dtargethost=somehost
なしで起動された場合、 miniperl
と generate_uudmap
をビルドするようになりました。 これにより、config.sh
にターゲットプラットフォームを指定して、 ヘッダを生成し、クロスターゲット perl のビルドを進められるようになりました。 [perl #127234]
-Accflags=-DPERL_TRACE_OPS
付きでビルドされた Perl は PERL_TRACE_OPS
環境変数が非 0 整数に設定された場合に演算子カウントのみを ダンプするようになりました。 これにより、このようなビルドで make test
がパスするようになりました。
GCC 6 とリンク時最適化 (gcc
の -flto
オプション) でビルドされたとき、 Configure はプローブされたシンボルに関して、実際に存在するかどうかに 関わらず全て存在するものとして扱っていました。 これは修正されました。 [perl #128131]
t/test.pl ライブラリは Perl 自身の内部テストで使われていて、 いくつかの CPAN モジュールによってコピーされています。 これらのモジュールの一部は古いバージョンの Perl で動作しなければならないので、 t/test.pl は新しい Perl の機能を避けなければなりません。 少し前に不注意で Perl 5.8 との互換性がなくなっていました; これは回復されました。 [perl #128052]
ビルドプロセスはもはやそれぞれの「単純な」(*.pm と *.pod ファイルのみの) エクステンションのビルドの前に余分な空行を出力しなくなりました。
テストはこのリリースでのその他の追加や変更を反映して追加や変更されました。 さらに、以下の実質的な変更が行われました:
comp/parser.t と同様ですが test.pl を含んでいるので runperl()
と同様なものが使える、 新しいテストスクリプトである comp/parser_run.t が追加されました。
ロケールのテストは誤って Perl と互換性のないロケールを使っていました。
正規表現の実装に関するエッジケースを徹底的に試すような、テストスイートの 一部のパートは、最大実行時間を 5 分間に制限するようになりました。 さもなければ、テストでのコードの正当性に対する私たちの理解を大幅に 向上させない限り、遅いシステムでは数時間かかることがあります。
新しい内部機能により、Perl 自身のテストスイートの個々のテストで 掛かった時間を解析できるようになりました; Porting/harness-timer-report.pl を参照してください。
正規表現エンジンが文字列の末尾にヌルバイトがないスカラを扱えることを テストするための t/re/regexp_nonull.t が追加されました。
新しいテストスクリプト t/op/decl-refs.t が、新しい機能 "Declaring a reference to a variable" をテストするために追加されました。
新しいテストスクリプト t/re/keep_tabs.t が、 \t
文字が空白に展開されるべきではないテストのために追加されました。
新しいテストスクリプト t/re/anyof.t が、大かっこ文字列で生成された ANYOF ノードが想定通りかをテストするために追加されました。
Unicode 関連の API マクロと関数に関してより広範囲に テストするようになりました。
長時間実行される API テストファイルのいくつかが複数のテストファイルに 分割され、平行して実行できるようになりました。
t/harness は Perl ソースツリー外にあるテストをできるだけ 実行しないようになりました。 [perl #124050]
デバッガテスト (lib/perl5db.t) が $ENV{PERLDB_OPTS}
の内容によって 失敗しないようになりました。 [perl #130445]
Perl は VAX マシン上の NetBSD でコンパイルできるようになりました。 しかし、このプラットフォームのために、 IEEE-754 浮動小数点数標準を実装しているほとんどのモダンなシステムと 互換性のある浮動小数点数の無限と NaN を実装することはできません。 16 進浮動小数点数 (0x...p[+-]n
リテラルと printf %a
) も 実装されていません。 make test
は、テストの 98% にパスします。
テストの修正と小さい更新。
inf
, nan
, -0.0
がない場合の対応。
-Dprefix=/usr
を特別扱いしません: 代わりに、同じ結果を生成するために 追加の -Ddarwin_distribution
オプションが必要です。
OS X El Capitan は clock_gettime()
や clock_getres()
API を 実装していません; 必要な場合これらをエミュレートします。
macOS 10.12 では syscall(2)
は廃止予定です。
いくつかのテストは EBCDIC プラットフォームで動作(またはスキップ)するように 更新されました。
Net::Ping UDP テストは HP-UX ではスキップするようになりました。
Hurd のためのヒントが改良され、malloc ラップが有効になり、GNU libc が 使われているように報告します (以前は報告されるときは空文字列でした)。
VAX 浮動小数点形式は NetBSD で対応されるようになりました。
PERL5LIB
と PERLLIB
環境変数のパス区切りは、Unix シェルの基で 実行されているときはコロン (":"
) になりました。 DCL の基で実行されているときは変更はありません ("|"
のままです)。
configure.com は VSI ブランドの C コンパイラを認識するようになり、 (もう 15 年以上もそのようなものはないので) もはや "DEC" ブランドの C コンパイラを認識しなくなりました。
(Visual C++ 14.0 を含む) Microsoft Visual Studio 2015 を使った Windows 版 perl のビルド対応が追加されました。
このバージョンの VC++ は完全に書き直された C ランタイムを含んでおり、 perl #120091 and perl #118059 のソケット close()
バグの解決のために 行われた変更が現在のバージョンの VC++ の現在の状況では動作しないことを 意味します。 従って、VS2015 以降でビルドできることが、このバグ修正を維持することよりも 重要であるという判断に基づいて、私たちは VS2015 以降ではこのバグ修正を 取り消しました。 私たちは VS2015 との互換性という点でこのバグを再び修正しようとするために 将来ここに戻ってくる予定です。
この変更は、GCC や VS2013 以前のバージョンの Visual Studio には影響しません; つまり, これらのコンパイラではバグ修正は(無変更で)残っています。
GCC や VS <= VS2013 でビルドした perl と VS2015 でビルドした XS モジュールを混ぜたり、VS2015 でビルドした perl と GCC や VS <= VS2013 でビルドしたXS モジュールを混ぜたりすると、互換性問題を 経験するかもしれないことに注意してください。 非互換性の一部は perl の VS2015 ビルドのためのバグ修正の取消しのために 起こりますが、同様にそもそも VS2015 での CRT の書き直しによる 非互換性もあります (例えば, http://stackoverflow.com/questions/30412951 での議論を参照してください)。
Visual C に対する GCC を自動的に検出して、Win32 での VC バージョンを 設定するようになりました。
Linux a.out 実行ファイル型式対応が削除されました。 Linux は 20 年以上 ELF を使っています。
OpenBSD 6 はまだ SA_SIGINFO
で pid
, gid
, uid
を返すことに 対応していません。 これを考慮するようになりました。
t/uni/overload.t: FreeBSD でのハングテストをスキップします。
DragonFly BSD は setproctitle()
に対応するようになりました。 [perl #130068].
新しい API 関数 sv_setpv_bufsize()
は SV
のバッファの長さと割り当てサイズを同時に設定できます; 必要ならバッファを拡張します。
新しい API マクロ SvPVCLEAR()
は、 Perl 空間での $x = ''
のように、その SV
引数に空文字列を代入しますが、 いくつかの最適化が行われます。
Unicode と UTF-8 エンコードされた文字列を扱ういくつかの新しいマクロと 関数が API に追加され、 既存の関数の機能が一部変更されました (さらなる詳細については "Unicode Support" in perlapi を参照してください):
isALPHA_utf8
や toLOWER_utf8
ような API マクロに新しいバージョンが 追加されました; isSPACE_utf8_safe
のように、 それぞれの末尾に _safe
が追加されたものです。 これらは追加の引数を取り、文字列を安全に読み込める最大数を指定します。 古いバージョンを使うと、UTF-8 が整形されていない場合に 入力バッファの末尾を越えて読み込もうとする場合があるので、 これらの使用は廃止予定警告が出力されるようになりました。 詳細は "Character classification" in perlapi にあります。
isALPHA_utf8
や toLOWER_utf8
のようなマクロは、入力 UTF-8 が 不正であることを検出したときに die するようになりました。 廃止予定警告は Perl 5.18 から出力されていました。
utf8 並びの有効性を解析するためのいくつかの新しいマクロ。その一覧は:
UTF8_GOT_ABOVE_31_BIT
UTF8_GOT_CONTINUATION
UTF8_GOT_EMPTY
UTF8_GOT_LONG
UTF8_GOT_NONCHAR
UTF8_GOT_NON_CONTINUATION
UTF8_GOT_OVERFLOW
UTF8_GOT_SHORT
UTF8_GOT_SUPER
UTF8_GOT_SURROGATE
UTF8_IS_INVARIANT
UTF8_IS_NONCHAR
UTF8_IS_SUPER
UTF8_IS_SURROGATE
UVCHR_IS_INVARIANT
isUTF8_CHAR_flags
isSTRICT_UTF8_CHAR
isC9_STRICT_UTF8_CHAR
全て is_utf8_string_*()
の拡張である関数; UTF-8 が正当であると認識するために様々な制限が適用されます:
is_strict_utf8_string
, is_strict_utf8_string_loc
, is_strict_utf8_string_loclen
,
is_c9strict_utf8_string
, is_c9strict_utf8_string_loc
, is_c9strict_utf8_string_loclen
,
is_utf8_string_flags
, is_utf8_string_loc_flags
, is_utf8_string_loclen_flags
,
is_utf8_fixed_width_buf_flags
, is_utf8_fixed_width_buf_loc_flags
, is_utf8_fixed_width_buf_loclen_flags
.
is_utf8_invariant_string
. is_utf8_valid_partial_char
. is_utf8_valid_partial_char_flags
.
utf8n_to_uvchr
とその派生関数は振る舞いが いくつか変更されました。
長さ 0 の文字列を渡してこれらを呼び出すと、DEBUGGING ビルドのときには アサートされる一方、そうでない場合は Unicode REPLACEMENT CHARACTER が返ります。 デコードするものが何もない場合は、デコード関数を呼び出すべきではありません。
長すぎる不正の UTF-8 で呼び出され、不正が入力引数として認められている場合、 Unicode REPLACEMENT CHARACTER を返すようになりました。 この不正は、UTF-8 が文法的には正当に見えるけれども、同じ符号位置になる より短い並びがある場合です。 これは Unicode バージョン 3.1 から禁止されました。
これらはオーバーフロー不正を許すという入力フラグを 受け付けるようになりました。 この不正は、UTF-8 が文法的は正当であるけれども、表現している符号位置が プラットフォームのワード長で表現できない場合です。 この場合の「許す」とは、関数はエラーを返さず、問題の UTF-8 の先まで パースのポインタを進めるけれども、その符号位置の値として (実際の値は表現できないので) Unicode REPLACEMENT CHARACTER を 返すということです。
これらはもはや、最初の不正入力に出会った後、他の不正入力を探すのを 中断しなくなりました。 従って、これらの関数の一つを呼び出すと、一つではなく複数の診断メッセージが 生成されることがあります。
(以前からコアには存在していましたが) valid_utf8_to_uvchr()
が API に 追加されました。 utf8_to_uvchr_buf()
と同様ですが、次の文字が正当であることを仮定します。 注意して使ってください。
新しい関数である utf8n_to_uvchr_error
が、 UTF-8 不正に関して成功/失敗を越えた詳細を知る必要があるモジュールが 使うために追加されました。 以前は、なぜ並びが不正な型式かを知る唯一の方法は、 生成された診断メッセージを捕捉してパースするか、自力で解析することでした。
utf8_hop_safe()
という、 utf8_hop() のより安全なバージョンが追加されました。 utf8_hop() と異なり、utf8_hop_safe() は指定されたバッファの先頭より前や 末尾より後ろまで移動しません。
二つの新しい関数 utf8_hop_forward()
と utf8_hop_back()
は utf8_hop_safe()
に似ていますが、移動したい方向が分かっているとき用です。
有用な utf8 バイト並びを返す二つの新しいマクロ:
Perl はデフォルトで PERL_OP_PARENT
コンパイラ定義を有効にして ビルドされるようになりました。 これを無効にするには、PERL_NO_OP_PARENT
コンパイラ定義を使ってください。 このフラグは OP
構造体の中の op_sibling
フィールドの使い方を変更します; これはオプションとして perl 5.22 から利用可能でした。
このビルドオプションが何をするかに関するさらなる詳細については "Internal Changes" in perl5220delta を参照してください。
三つの新しい op, OP_ARGELEM
, OP_ARGDEFELEM
, OP_ARGCHECK
が 追加されました。 これらは主に、サブルーチンシグネチャの個々の要素を実装するためと、 それに加えて必要な全体的なチェックを意図しています。
OP_PUSHRE
op は削除され、OP_SPLIT
op はクラスが LISTOP
から PMOP
に変更されました。
以前は、ある split の最初の子は pushre
で、これには split
の正規表現が添付されていました。 正規表現は split
op に直接添付されるようになり、 pushre
は削除されました。
op_class()
API 関数が追加されました。 これは既存の OP_CLASS()
マクロと同様ですが、 ある op がどの構造体として割り当てられたかをより正確に 決定できるようになりました。 例えば、OP_CLASS()
は、この型の op は通常 OP
や UNOP
として 割り当てられることを示す OA_BASEOP_OR_UNOP
を返すかもしれません; 一方 op_class()
は適切に OPclass_BASEOP
や OPclass_UNOP
を返します。
内部の全ての部分は、sassign
op が BINOP
であることに 合意するようになりました; 以前は regen/opcodes に BASEOP
として一覧されていて、これは内部の いくつかの部分では対応に特別扱いが必要であることを意味していました。 このおかしな状態の元々の動機は $x ||= 1
のようなコードを扱うことでした; 今はより簡単な方法で扱うようになりました。
(perl -Dx
で使われる) op_dump()
関数の 出力形式が変わりました: これは「ASCII アート」木構造を表示するようになり、 それぞれの op に対するアドレスとクラスのようなより低レベルの詳細を 表示するようになりました。
PADOFFSET
型は符号なしから符号付きに変更され、 PL_padix
のようないくつかのパッド関連の変数は I32
型から PADOFFSET
型に変更されました。
正規表現のコンパイルと実行時の DEBUGGING
モードでの出力が拡張されました。
いくつかの不明瞭な SV フラグが削除されました; 時々これらを操作するマクロも 削除されました: SVpbm_VALID
, SVpbm_TAIL
, SvTAIL_on
, SvTAIL_off
, SVrepl_EVAL
, SvEVALED
.
OP op_private
フラグは削除されました: OPpRUNTIME
。 これはしばしば PMOP
op での get set に使われていましたが、 時が経つにつれてこれは無意味になりました。
libc の strxfrm()
実装にバグがあるマシンで一部のロケールに 切り替えても panic しなくなりました。 [perl #121734]
正規表現に名前付き捕捉がないときの $-{$name}
は、アクセス毎に AV
が一つリークしていました。 同じことは Tie::Hash::NamedCapture と all => 1
で tie されたハッシュにアクセスしたときにも起きていました。 [perl #130822]
廃止予定の変数 $#
に間接オブジェクトメソッド呼び出しのオブジェクトとして 使おうとすると、解放後のヒープ使用やバッファオーバーフローが 起きることがありました。 [perl #129274]
間接オブジェクトメソッド呼び出しのチェック時に、一部の稀な場合で パーサが行バッファを再配置した後、古いバッファへのポインタを 使い続けることがありました。 [perl #129190]
formline
のフォーマット引数としてグロブを ステイするとアサート失敗が起こることがありました。 [perl #130722]
$value1 =~ qr/.../ ~~ $value2
のようなコードは、 qr//
演算子に変換されたものにマッチングし、周りの式を混乱させる 余分な要素をスタック上に残していました。 [perl #130705]
v5.24 からある種の不明瞭な状況で、 複数のソースからのコードブロックを含む正規表現 (例えば, qr//
オブジェクト経由で組み込まれたもの) は、 カレントパッドが間違った状態に成り、クラッシュしたりおかしな結果に なったりしていました。 [perl #129881]
パターンの中のコードブロック中の local()
は時々、 パターンマッチングがコードブロックを越えてバックトラックしたときに 元に戻っていませんでした。 [perl #126697]
マジカル変数を変更するのに substr()
を使うと場合によっては解放された メモリにアクセスすることがありました。 [perl #129340]
use utf8
の基では、ソースコード全体が UTF-8 整形されているかどうかを チェックするようになりました; 以前はクォートされた文字列だけでした。 [perl #126310].
文字列の範囲演算子 ".."
は、 unicode_strings
機能の スコープの中で正しく引数を扱えるようになりました。 以前の振る舞いは、これを正しく使えるプログラムはないと信じられるぐらいに 十分予測不能なものでした。
split
演算子はスカラコンテキストで返り値のための十分なスペースが 割り当てられているかどうかを十分に確認していませんでした。 これによって、スタックのために割り当てられたメモリブロックの端を越えて すぐのところに一つのポインタを書くことがありました。 [perl #130262]
現在の出力位置がちょうど右側のポイントに位置しているときに "W"
pack テンプレート文字で大きな符号位置を使うと、 割り当てられたバッファの末尾を越えたすぐのところに一つのゼロバイトを 書くことがありました。 [perl #129149]
picture が引数の修正を指定しているときに、format の picture 引数として format 引数リストの一部として指定すると、新しく解放されたコンパイル形式に アクセスすることがありました。 [perl #129125]
The sort() 演算子の組み込みの数値比較関数は double で正確に表現できない大きな整数を扱えませんでした。 これは <=>
演算子を実装するのに使われるのと同じコードを 使うようになりました。 [perl #130335]
Method::Signatures を壊す /(?{ ... <<EOF })/
の問題が 修正されました。 [perl #130398]
chop(@x =~ tr/1/1/)
によって引き起こされることがある、 chop
と chomp
のアサート失敗が修正されました。 [perl #130198].
/x
の基でパターン中のコメント読み飛ばしエラーが修正されました; これは 1 バイト早く止まることがあり、UTF-8 文字の途中に なることがありました。 [perl #130495].
perldb は、非 Unix システムでは /dev/tty を無視するようになりました。 [perl #113960];
$x
が定義されていないときの {}->$x
のアサート失敗が 修正されました。 [perl #130496].
パターンの前方文字列が最短長を越えたときに起きることがあるアサートエラーが 修正されました。 [perl #130522].
一つの数値での間違った位置の "_"
について、1 回だけ 警告するようになりました。 [perl #70878].
tr///
パースコードはパースエラーの後未初期化データを見ることがありました。 [perl #129342].
パターンマッチングで、マッチングしていない捕捉に対する後方参照 (\1
) が マッチングした文字列の先頭を超えて読み戻ることがありました。 [perl #129377].
(/(?[ [ X-Y ] ])/
のような) 範囲のうち、開始と終了の数字が 10 の中の同じグループにない場合に警告するはずでした。 これは U+1D7E
から始まる五つのグループの算術数字では 行われていませんでした。
同じ名前の「前方」宣言を含むサブルーチン (例えば sub c { sub c; }
) が 時々クラッシュしたり無限ループしたりしていました。 [perl #129090]
UTF-8 を使っているターゲット文字列に対して非アンカー UTF-8 部分文字列で 正規表現を実行するしたときのクラッシュが修正されました。 [perl #129350]
以前は、#!perl -i u
のようなシェバン行は誤って -u
オプションを 要求していると解釈されることがありました。 これは修正されました。 [perl #129336]
正規表現エンジンは、一つのものだけにマッチングする代替を越えて バックトラックするとき、ある種の稀な状況では以前は間違った結果を 生成していました; これは、捕捉バッファ ($1
, $2
, など) に、 実際には最終的に実行されていない正規表現実行パスからのデータを 間違って含む形で現れていました。 [perl #129897]
実験的な regex_sets
機能を使うある種の正規表現がアサート失敗を 引き起こすことがありました。 これは修正されました。 [perl #129322]
リファレンス構築子への不正な代入 (例えば \eval=time
) が、 文法エラーに加えて時々クラッシュすることがありました。 [perl #125679]
evalbytes
の後に裸の単語がある場合にパーサがクラッシュすることが ありました。 [perl #129196]
起動元が bless しているパッケージにスタブが存在するとき、メソッド呼び出し 経由のオートロードは間違って警告していました ("Use of inherited AUTOLOAD for non-method")。 このような場合では警告はもはや出力されなくなりました。 [perl #47047]
存在しない要素に対して配列に splice
を使うと、他の演算子のクラッシュを 引き起こすことがありました。 [perl #129164]
パターンに固定 utf8 部分文字列が含まれているとバッファオーバーランが 起きる可能性がありました。 [perl #129012]
perl lexer での二つの use-after-free バグの可能性を修正しました。 [perl #129069]
実際には違うときに UTF-8 を扱っていると考えているときの s///l
の クラッシュが修正されました。 [perl #129038]
&.
演算子 (および引数を文字列として扱う場合の "&"
演算子) は 少なくとも一つの文字列が内部で utf8 とマークされている場合に末尾の NUL バイトの追加に失敗していました。 多くのコードパス (システムコール、正規表現コンパイル) ではまだ 文字列バッファ中の論理文字列の末尾に NUL バイトがあることを想定しています。 結果としてアサート失敗になります。 [perl #129287]
パーサが文法的に不正なヒヤドキュメントに対してエラーメッセージを 作成するときの heap-after-use エラーを避けるようになりました。 [perl #128988]
Fix a segfault when run with DEBUGGING ビルドで -DC
オプション付きで実行したときの セグメンテーションフォルトが修正されました。 [perl #129106]
末尾に '")"
' がない ':attr(foo
' の形のサブルーチン属性の パーサエラーの扱いが修正されました。
クォートされた文字列のコンテキストの最後の文字としての逆スラッシュを 正しく扱えるように perl の構文解析器を修正しました。 これは実際には二つのバグを修正しました。 [perl #129064] と [perl #129176]。
API 関数 gv_fetchmethod_pvn_flags
において、 不正な len
引数によって文字列オーバーランが起きる可能性を 避けるために区切りのパースについて再作業されました。 [perl #129267]
その場配列ソートの問題: @a = sort { ... } @a
のようなコードで、 ソート元とソート先が同じ単純な配列の場合、コピーを減らすことで 最適化されます。 この最適化の二つの副作用として、ソートルーチンから見える @a
の内容が ソート途中のものになっていました; もう一つはある種の状況ではソートの中で @a
にアクセスするとインタプリタがクラッシュすることがありました。 これらの問題はどちらも修正され、ソート関数は @a
の 元の値を見るようになりました。 [perl #128340]
非 ASCII 文字列区切り文字は、終端されていない文字列のエラーメッセージで 正しく報告されるようになりました。 [perl #128701]
pack("p", ...)
は一部の場合で間違った警告 ("Attempt to pack pointer to temporary value") を出力していましたが これは修正されました。
@DB::args
は "used once" 警告から免れるようになりました。 この警告は -w の基でのみ起きていました; warnings.pm 自身が @DB::args
を複数回使っているからです。
ダブルクォートされた文字列の中の組み込みの配列やハッシュのスライスを 使ったとき、変数が以前に言及されていなくてももはや警告 ("Possible unintended interpolation...") を出力しなくなりました。 これは qq|@DB::args|
や qq|@SIG{'CHLD', 'HUP'}|
のようなコードに 影響を与えます。 (特殊変数 @-
と @+
は既に警告を免れています。)
gethostent
および同様の関数は、torsocks ライブラリでの クラッシュを防ぐために、内部でヌルチェックを行うようになりました。 これは v5.22 からの退行でした。 [perl #128740]
defined *{'!'}
, defined *{'['}
, defined *{'-'}
は、 問題の型グロブが以前アクセスされたことがなかった場合にも メモリリークしなくなりました。
連続して 2 回同じ定数に言及 (これは文法エラーです) しても、 デバッグビルドの基でアサート失敗しなくなりました。 これは v5.20 からの退行でした。 [perl #126482]
16 進浮動小数点の printf "%a"
に関する多くの問題が修正されました。 さらに、非正規化数("subnormals") (以前は "denormals" として 知られていました) 浮動小数点数は、通常の IEEE 754 浮動小数点数 (64 ビット または 128 ビット) と x86 の 80 ビット「拡張精度」の両方に対応しました。 非正規化 16 進浮動小数点数リテラルは「指数アンダーフロー」に関する 警告が出ることに注意してください。 [perl #128843] [perl #128889] [perl #128890] [perl #128893] [perl #128909] [perl #128919]
符号位置が 128 から 255 の間のときの tr/\N{U+...}/foo/
の v5.24 からの 退行が修正されました。 [perl #128734].
符号位置が 2**31 を越える符号位置を文字列区切りとして使うのは、 これが許されているプラットフォームでは正しく動作するようになりました。 以前は、ある種の文字は、切り詰められるために、(m?...?
での "?"
の ような)特別な意味を持つ他の区切り文字と混乱して、 一貫性のない振る舞いをすることになっていました。 これは移植性がなく、Perl の UTF-8 への拡張に依存していて、 おそらくどんなエディタでも表示したり入力したりできないことに 注意してください。 [perl #128738]
"x"
が制御文字や非 ASCII 文字のとき、@{x
に引き続いて改行があっても、 もはや不明瞭な文法エラーやクラッシュを引き起こさなくなりました。 [perl #128951]
%: = 0
でのアサート失敗が修正されました。 [perl #128238]
Perl 5.18 で、"$foo::$bar"
のパースが誤って変更され、 $foo."::".$bar
として扱われていました。 これを $foo:: . $bar
としてパースするという以前の振る舞いが 復元されました。 [perl #128478]
Perl 5.20 から、perl が -x 付きで起動されたとき、行番号が 1 ずれていました。 これは修正されました。 [perl #128508]
削除されたスタッシュでのサブルーチンスタブの自動有効化 (例えば, delete $My::{"Foo::"}; \&My::Foo::foo
) は もはやクラッシュしなくなりました。 これは Perl 5.18 からクラッシュしていました。 [perl #128532]
同時に解放されたサブルーチンとファイルハンドルのいくつかの不明瞭な場合に クラッシュを引き起こすことがありましたが、これは修正されました。 このクラッシュは Perl 5.22 で導入されていました。 [perl #128597]
非初期化値に割り当てられた変数名を探すコードは、$ISA[0][0]
のように マジックが関係する場合にアサート失敗を引き起こすことがありました。 これは修正されました。 [perl #128253]
sub P::f{} undef *P::; *P::f =sub{};
のような、 "Subroutine STASH::NAME redefined" 警告を出すようなコードによる クラッシュが修正されました。 これらの場合で、STASH がない場合、警告は "Subroutine NAME redefined" として出力されるようになりました。 [perl #128257]
フォーマットでの廃止予定の振る舞いを扱うコードによって引き起こされる アサートが修正されました; 例えば 次のようなものです:
format STDOUT =
@
0"$x"
Windows の文字列変換コードで 0 除算エラーが起きる可能性が除去されました; 空文字列の照合でのクラッシュが修正されました。 [perl #128618]
おかしなものをパースする一部の正規表現で、/(?<=/
と /(?<!/
のような正規表現でアサート失敗を引き起こすことがありました。 これは修正されました。 [perl #128170]
until ($x = 1) { ... }
と ... until $x = 1
は、 文法警告が有効のときに適切に警告されるようになりました。 [perl #127333]
socket() は、失敗時に システムから返された $!
のエラーコードを そのままにするようになりました。 [perl #128316]
bitwise
機能の基でのビット単位 op の代入は、左側が配列やハッシュの場合 クラッシュしていました。 [perl #128204]
(foo() ? require : ...
のように) require
に単一のコロンが 引き続いた場合、require ""
ではなく、暗黙の $_
での require
であるというように正しくパースされるようになりました。 [perl #128307]
スカラの keys %hash
は他のスカラ左辺値コンテキストと一貫性を持って 代入されるようになりました。 以前は一部のコンテキストでは動作していましたがそれ以外では 動作していませんでした。
vec
や substr
へのリスト代入で、最初の引数が配列やハッシュの場合、 スカラ代入の場合のコンパイル時エラーと異なり、クラッシュしたり、実行時に "Can't coerce" エラーが出たりしていました。 リスト代入もコンパイルエラーになるようになりました。 [perl #128260]
&&
や ||
演算子 (およびその同義語の and
や or
) を含む式は 場合によっては間違ってコンパイルされていました。 左側が否定された裸の単語の定数または定数式を含む否定された do {}
ブロックで、右側が否定された畳み込みできない式の場合、 否定の片方が事実上無視されていました。 同じことは if
と unless
文修飾子でも起きていましたが、 右側と左側の条件は入れ替わっていました。 この長い間存在していたバグは修正されました。 [perl #127952]
引数付きの reset
はスタッシュエントリがグロブ以外でももはや クラッシュしなくなりました。 [perl #128106]
*::::::
という名前の型グロブのハッシュへの代入や削除はもはや クラッシュを引き起こさなくなりました。 [perl #128086]
Perl はリスト代入の左側の真偽値、特に真偽値演算子から返された 真の値を正しく扱えていませんでした; これにより、次のような場合にアサート失敗を引き起こすことがありました:
for ($x > $y) {
($_, ...) = (...); # here $_ is aliased to a truth value
}
これは v5.24 からの退行でした。 [perl #129991]
ユーザー定義 Unicode 風特性に関するアサート失敗。 [perl #130010]
正規表現中の閉じていない \N{
に関するエラーメッセージが修正されました。 閉じていない \N{
は間違ったエラーメッセージを出すことがありました: "\N{NAME} must be resolved by the lexer"
リストコンテキストでのリスト代入で、左側に集合体を含み、右側の要素が 足りない場合、スカラ左辺値を読み飛ばしていました。 以前は、リストコンテキストでの (($a,$b,@c,$d) = (1))
は ($a)
を返していました; これは ($a,$b,$d)
を返すようになりました。 (($a,$b,$c) = (1))
は変わりません: ($a,$b,$c)
を返すままです。 これは次のようにして見ることができます:
sub inc { $_++ for @_ }
inc(($a,$b,@c,$d) = (10))
以前は、($a,$b,$d)
の値は (11,undef,undef)
になっていました; 今は (11,1,1)
になります。
/(?{ s!!! })/
のようなコードは、スコープないで最後に成功したパターンが 自分自身の場合、(通常の perl スタックではなく) C スタックでの 無限再帰を引き起こすことがありました。 単に現在実行しているパターンの解決のときに空パターンを使うことを 禁止することでセグメンテーションフォルトを避けるようにしました。 [perl #129903]
短い UTF-8 文字が末尾にあるときに perl の構文解析器の行バッファの 末尾を越えて読み込むのを避けるようになりました。 [perl #128997]
正規表現中の代替は時々 utf8 代替に対する utf8 文字列にマッチングするのに 失敗していました。 [perl #129950]
do "a\0b"
はエラーを投げずに暗黙に失敗する (そして undef
を返して $!
を設定する) ようになりました。 [perl #129928]
引数なしの chdir
は、結果を返すために十分なスタック空間があることを 確認していませんでした。 [perl #129130]
do
に関するエラーメッセージは do
を参照するようになりました; 以前は一部で代わりに require
からであると主張していました。
$x
が tie されていたりマジカルな場合の undef $x
の実行すると、 この変数に対して tie された/マジカルな コードに遭遇することによる 非初期化値警告を出していましたが、もはや出さなくなりました。
$x = $x . "a"
のようなコードは、$x
が未定義値のレキシカル変数の場合、 間違って use of uninitialized value 警告が 出ていました。 これは修正されました。 [perl #127877]
サブルーチンの中での undef *_; shift
や undef *_; pop
で、 shift
や pop
への引数がない場合、Perl 5.14 から クラッシュしていましたが、修正されました。
$scalar->$*
がオーバーロードされたオブジェクトを返す場合、 "string$scalar->$*"
は正しく文字列オーバーロードではなく 結合オーバーロードを使うようになりました; これは $$scalar
と一貫性があります。
/@0{0*->@*/*0
や似たようなねじれはクラッシュしていましたが、 もはやクラッシュせず、単に文法エラーが出力されるようになりました。 [perl #128171]
文字列化すると NUL 文字を含むようなリファレンスや型グロブを引数にした do
や require
は Perl 5.20 からクラッシュしていましたが、 修正されました。 [perl #128182]
tie()
パッケージ/メソッドがない場合のエラーメッセージが改良されました。 これは通常のメソッド呼び出しでのものと一致したエラーメッセージが 出るようになりました。
間違った POSIX 文字クラスのパースでメモリリークしなくなりました。 [perl #128313]
G++ 6 非正規化浮動小数点を gcc 6 や g++ 5 と異なる形で扱うため、"flush-to-zero" となります。 最終的な結果としては、0x1.fffffffffffffp-1022
のように 16 進 浮動小数点形式を使ってとても小さい値を指定すると、ゼロになります。 [perl #131388]
再帰正規表現の問題が修正されました。 振る舞いは Perl 5.24 で修正されていました。 [perl #126182]
多作な Perl 作者であり、称賛される Gentoo コミュニティメンバーであった Jon Portnoy (AVENJ) は 2016 年 10 月 10 日に死去しました。 彼に出会い、その知性、機知、精神によって心豊かになった 全ての人々に記憶され、惜しまれました。
Kip Hampton の死去について記すのも大きな悲しみです。 おそらく XML.com での Perl & XML コラムの作者として最もよく知られている彼は、 Apache Foundation プロジェクトになった XML サーバプラットフォームである AxKit のコア貢献者でした。 彼は OSCON の初期に頻繁にスピーカーをしており、 最も最近のものは Madison での YAPC::NA のものでした。 彼は ubu として irc.perl.org に、一般的に #axkit-dahut グループに 参加していました; このグループは 2011 年の YAPC::NA Asheville に 責任を負っていました。
Kip と彼のコミュニティへの絶え間ない貢献はとても惜しまれます。
Perl 5.26.0 は、Perl 5.24.0 以降、86 人の作者によって、 2,600 のファイルに約 360,000 行の変更を加えて、 約 13 ヶ月開発されてきました。
自動生成ファイル、文書、リリースツールを除くと、1,800 の .pm, .t, .c, .h ファイルに約 230,000 行の変更を加えました。
Perl は、活気のあるユーザーと開発者のコミュニティのおかげで 20 年を超えて 繁栄しています。 以下の人々が、Perl 5.26.0 になるための改良に貢献したことが分かっています:
Aaron Crane, Abigail, Ævar Arnfjörð Bjarmason, Alex Vandiver, Andreas König, Andreas Voegele, Andrew Fresh, Andy Lester, Aristotle Pagaltzis, Chad Granum, Chase Whitener, Chris 'BinGOs' Williams, Chris Lamb, Christian Hansen, Christian Millour, Colin Newell, Craig A. Berry, Dagfinn Ilmari Mannsåker, Dan Collins, Daniel Dragan, Dave Cross, Dave Rolsky, David Golden, David H. Gutteridge, David Mitchell, Dominic Hargreaves, Doug Bell, E. Choroba, Ed Avis, Father Chrysostomos, François Perrad, Hauke D, H.Merijn Brand, Hugo van der Sanden, Ivan Pozdeev, James E Keenan, James Raspass, Jarkko Hietaniemi, Jerry D. Hedden, Jim Cromie, J. Nick Koston, John Lightsey, Karen Etheridge, Karl Williamson, Leon Timmermans, Lukas Mai, Matthew Horsfall, Maxwell Carey, Misty De Meo, Neil Bowers, Nicholas Clark, Nicolas R., Niko Tyni, Pali, Paul Marquess, Peter Avalos, Petr Písař, Pino Toscano, Rafael Garcia-Suarez, Reini Urban, Renee Baecker, Ricardo Signes, Richard Levitte, Rick Delaney, Salvador Fandiño, Samuel Thibault, Sawyer X, Sébastien Aperghis-Tramoni, Sergey Aleynikov, Shlomi Fish, Smylers, Stefan Seifert, Steffen Müller, Stevan Little, Steve Hay, Steven Humphrey, Sullivan Beck, Theo Buehler, Thomas Sibley, Todd Rinaldo, Tomasz Konojacki, Tony Cook, Unicode Consortium, Yaroslav Kuzmin, Yves Orton, Zefram.
これはバージョンコントロール履歴から自動的に生成しているので、ほぼ確実に 不完全です。 特に、Perl バグトラッカーに問題を報告をしてくれた (とてもありがたい)貢献者の 名前を含んでいません。
このバージョンに含まれている変更の多くは、Perl コアに含まれている CPAN モジュール由来のものです。 私たちは Perl の発展を助けている CPAN コミュニティ全体に感謝します。
全ての Perl の歴史的な貢献者のより完全な一覧については、どうか Perl ソース 配布に含まれている AUTHORS を参照してください。
もしバグと思われるものを見つけたら、 https://rt.perl.org/ にある perl バグ データベースを確認してください。 Perl ホームページ、http://www.perl.org/ にも情報があります。
もしまだ報告されていないバグだと確信したら、そのリリースに含まれている perlbug プログラムを実行してください。 バグの再現スクリプトを十分小さく、しかし有効なコードに切りつめることを 意識してください。 バグレポートは perl -V
の出力と一緒に perlbug@perl.org
に送られ Perl porting チームによって解析されます。
報告しようとしているバグがセキュリティに関するもので、公開されている メーリングリストに送るのが不適切なものなら、バグの報告方法の詳細について "SECURITY VULNERABILITY CONTACT INFORMATION" in perlsec を参照してください。
もし Perl 5 でなされた作業について Perl 5 Porters 感謝したいと考えたなら、 perlthanks
プログラムを実行することでそうできます:
perlthanks
これは Perl 5 Porters メーリングリストにあなたの感謝の言葉をメールします。
変更点の完全な詳細を見る方法については Changes ファイル。
Perl のビルド方法については INSTALL ファイル。
一般的なことについては README ファイル。
著作権情報については Artistic 及び Copying ファイル。