名前

perl5140delta - what is new for perl v5.14.0

perl5140delta - perl v5.14.0 での変更点

説明

This document describes differences between the 5.12.0 release and the 5.14.0 release.

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

If you are upgrading from an earlier release such as 5.10.0, first read perl5120delta, which describes differences between 5.10.0 and 5.12.0.

5.10.0 のような以前のメジャーバージョンから更新する場合は、まず 5.10.0 と 5.12.0 の違いについて記述している perl5120delta を読んでください。

Some of the bug fixes in this release have been backported to subsequent releases of 5.12.x. Those are indicated with the 5.12.x version in parentheses.

このリリースで修正されたバグのいくつかは 5.12.x のリリースに バックポートされました。 そのようなものはかっこの中に 5.12.x のバージョン番号を書いて示しています。

注意

As described in perlpolicy, the release of Perl 5.14.0 marks the official end of support for Perl 5.10. Users of Perl 5.10 or earlier should consider upgrading to a more recent release of Perl.

perlpolicy に記述されているように、Perl 5.14.0 によって Perl 5.10 の サポートが公式に終了します。 Perl 5.10 以前のユーザーはより新しい Perl にアップグレードすることを 検討するべきです。

コアの拡張

Unicode

Unicode Version 6.0 に (ほぼ) 対応しました

Perl comes with the Unicode 6.0 data base updated with Corrigendum #8, with one exception noted below. See http://unicode.org/versions/Unicode6.0.0/ for details on the new release. Perl does not support any Unicode provisional properties, including the new ones for this release.

Perl は Corrigendum #8 で 更新された Unicode 6.0 データベースを同梱していますが、後述する 一つの例外があります。 新しいリリースについて詳しくは http://unicode.org/versions/Unicode6.0.0/ を参照してください。 Perl は、このリリースで新しいものを含む、全ての Unicode 仮特性は 対応していません。

Unicode 6.0 has chosen to use the name BELL for the character at U+1F514, which is a symbol that looks like a bell, and is used in Japanese cell phones. This conflicts with the long-standing Perl usage of having BELL mean the ASCII BEL character, U+0007. In Perl 5.14, \N{BELL} continues to mean U+0007, but its use generates a deprecation warning message unless such warnings are turned off. The new name for U+0007 in Perl is ALERT, which corresponds nicely with the existing shorthand sequence for it, "\a". \N{BEL} means U+0007, with no warning given. The character at U+1F514 has no name in 5.14, but can be referred to by \N{U+1F514}. In Perl 5.16, \N{BELL} will refer to U+1F514; all code that uses \N{BELL} should be converted to use \N{ALERT}, \N{BEL}, or "\a" before upgrading.

Unicode 6.0 は文字 U+1F514 に BELL という名前を選びました; これは日本の携帯電話で使われている、ベルのような形のシンボルです。 これは、BELL が ASCII BEL U+0007 を意味するという、長年の Perl の利用法と衝突します。 Perl 5.14 では、\N{BELL} は U+0007 を意味するままですが、非推奨 警告をオフにしていない限りは非推奨警告メッセージが出力されます。 Perl での U+0007 の新しい名前は ALERT です; これは既にある 短縮記法である "\a" といい感じに対応します。 \N{BEL} は U+0007 を意味し、警告も出ません。 5.14 では文字 U+1F514 に名前はありませんが、 \N{U+1F514} で 参照できます。 Perl 5.16 では \N{BELL} は U+1F514 を参照します; \N{BELL} を使っている全てのコードはアップグレードする前に \N{ALERT}, \N{BEL}, "\a" のいずれかを使うように変換するべきです。

Full functionality for use feature 'unicode_strings'

(use feature 'unicode_strings' の完全な機能)

This release provides full functionality for use feature 'unicode_strings'. Under its scope, all string operations executed and regular expressions compiled (even if executed outside its scope) have Unicode semantics. See "the 'unicode_strings' feature" in feature. However, see "Inverted bracketed character classes and multi-character folds", below.

このリリースでは use feature 'unicode_strings' に関する完全な機能が 提供されます。 このスコープ内では、全ての文字列操作の処理と正規表現のコンパイルは (たとえ実行はスコープ外でも) Unicode の意味論を持ちます。 "the 'unicode_strings' feature" in feature を参照してください。 しかし、後述する "Inverted bracketed character classes and multi-character folds" を 参照してください。

This feature avoids most forms of the "Unicode Bug" (see "The "Unicode Bug"" in perlunicode for details). If there is any possibility that your code will process Unicode strings, you are strongly encouraged to use this subpragma to avoid nasty surprises.

この機能はほとんどの形の「Unicode バグ」(詳しくは "The "Unicode Bug"" in perlunicode を参照してください。) を回避します。 もしコード中で Unicode 文字列を操作する可能性があるなら、 不快な驚きを回避するためにこの副プラグマを使うことを 強く 推奨します。

\N{NAME} and charnames enhancements

(\N{NAME}charnames の拡張)

  • \N{NAME} and charnames::vianame now know about the abbreviated character names listed by Unicode, such as NBSP, SHY, LRO, ZWJ, etc.; all customary abbreviations for the C0 and C1 control characters (such as ACK, BEL, CAN, etc.); and a few new variants of some C1 full names that are in common usage.

    \N{NAME}charnames::vianame は NBSP, SHY, LRO, ZWJ のような、 Unicode によってリストされている短縮文字名、 (ACK, BEL, CAN などのような)C0 と C1 制御文字の慣例的省略形、 一般的に使われている C1 完全名のいくつかのバリエーションを 認識するようになりました。

  • Unicode has several named character sequences, in which particular sequences of code points are given names. \N{NAME} now recognizes these.

    Unicode には多くの 名前付き文字シーケンス (named character sequences) が あり、特定の符号位置の並びには名前があります。 \N{NAME} はこれを認識するようになりました。

  • \N{NAME}, charnames::vianame, and charnames::viacode now know about every character in Unicode. In earlier releases of Perl, they didn't know about the Hangul syllables nor several CJK (Chinese/Japanese/Korean) characters.

    \N{NAME}, charnames::vianame, charnames::viacode は Unicode の 全ての文字を認識するようになりました。 Perl の以前のリリースでは、ハングル音節文字や CJK (中国/日本/韓国) の多くの 文字を認識していませんでした。

  • It is now possible to override Perl's abbreviations with your own custom aliases.

    Perl の省略型を独自の別名でオーバーライドできるようになりました。

  • You can now create a custom alias of the ordinal of a character, known by \N{NAME}, charnames::vianame(), and charnames::viacode(). Previously, aliases had to be to official Unicode character names. This made it impossible to create an alias for unnamed code points, such as those reserved for private use.

    \N{NAME}, charnames::vianame(), charnames::viacode() が 認識する文字の番号への独自の別名を作成できるようになりました。 以前は、別名は公式の Unicode 文字名に対するものである必要がありました。 これにより、プライベート用途のために予約されている符号位置のように 名前のない符号位置に対する別名を作ることができませんでした。

  • The new function charnames::string_vianame() is a run-time version of \N{NAME}}, returning the string of characters whose Unicode name is its parameter. It can handle Unicode named character sequences, whereas the pre-existing charnames::vianame() cannot, as the latter returns a single code point.

    新しい関数である charnames::string_vianame() は \N{NAME}} の実行時版で、引数の Unicode 名を持つ文字の 文字列を返します。 これは Unicode の名前付き文字の並びを扱うことができます; 一方既にある charnames::vianame() は一つの符号位置を返すので 扱うことができません。

See charnames for details on all these changes.

これら全ての変更について詳しくは charnames を参照してください。

問題のある (非) Unicode 符号位置のための新しい警告カテゴリ

Three new warnings subcategories of "utf8" have been added. These allow you to turn off some "utf8" warnings, while allowing other warnings to remain on. The three categories are: surrogate when UTF-16 surrogates are encountered; nonchar when Unicode non-character code points are encountered; and non_unicode when code points above the legal Unicode maximum of 0x10FFFF are encountered.

"utf8" 副カテゴリに三つの新しい警告が追加されました。 これらによって "utf8" 警告をの一部をオフにできるようにして、残りを 警告するままにできるようになります。 三つのカテゴリとは: UTF-16 サロゲートに遭遇したときの surrogate; Unicode の非文字符号位置に遭遇したときの nonchar; Unicode の正当な上限である 0x10FFFF を超える符号位置に遭遇したときの non_unicode です。

全ての符号なし値は文字にエンコードできます

With this release, Perl is adopting a model that any unsigned value can be treated as a code point and encoded internally (as utf8) without warnings, not just the code points that are legal in Unicode. However, unless utf8 or the corresponding sub-category (see previous item) of lexical warnings have been explicitly turned off, outputting or executing a Unicode-defined operation such as upper-casing on such a code point generates a warning. Attempting to input these using strict rules (such as with the :encoding(UTF-8) layer) will continue to fail. Prior to this release, handling was inconsistent and in places, incorrect.

このリリースでは、Perl は(Unicode として正当でない符号位置でも)全ての 符号なし値を符号位置として扱い、警告なしで (utf8 として)内部でエンコードできるモデルを採用しています。 しかし、utf8 やそれに対応する(前述した)副カテゴリの警告を明示的に レキシカルにオフにしない限り、このような 符号位置に対して(大文字化のような) Unicode が定義している出力や操作を行うと 警告が生成されます。 (:encoding('UTF-8') 層を使うような) 厳密なルールを使っての このような値の入力は失敗するままです。 このリリースの前では、扱いは非常に矛盾していて、あちこちで間違っています。

Unicode non-characters, some of which previously were erroneously considered illegal in places by Perl, contrary to the Unicode Standard, are now always legal internally. Inputting or outputting them works the same as with the non-legal Unicode code points, because the Unicode Standard says they are (only) illegal for "open interchange".

非 Unicode 文字 (その一部は以前は Unicode 標準に反して Perl では 間違って不正なものとされていました) は常に内部で有効なものとなりました。 それらの入出力は、Unicode 標準が「開かれた交換」のため(だけ)に不正で あると言っているように、不正な Unicode 符号位置と同様に動作します。

Unicode データベースファイルはインストールされません

The Unicode database files are no longer installed with Perl. This doesn't affect any functionality in Perl and saves significant disk space. If you need these files, you can download them from http://www.unicode.org/Public/zipped/6.0.0/.

Unicode データベースファイルは Perl にインストールされなくなりました。 これは Perl の機能には何の影響も与えず、かなりのディスク容量を節約します。 これらのファイルが必要な場合は、 http://www.unicode.org/Public/zipped/6.0.0/ からダウンロードできます。

正規表現

(?^...) construct signifies default modifiers

((?^...) 構造はデフォルト修飾子を示します)

An ASCII caret "^" immediately following a "(?" in a regular expression now means that the subexpression does not inherit surrounding modifiers such as /i, but reverts to the Perl defaults. Any modifiers following the caret override the defaults.

正規表現中、ASCII キャレット "^" の直後に "(?" があると、 (/i のような)それを囲む修飾子を継承せず、 Perl のデフォルトに戻ることを意味するようになりました。 キャレットに引き続く任意の修飾子はデフォルトを上書きします。

Stringification of regular expressions now uses this notation. For example, qr/hlagh/i would previously be stringified as (?i-xsm:hlagh), but now it's stringified as (?^i:hlagh).

正規表現の文字列化はこの記法を使うようになりました。 例えば、以前は qr/hlagh/i(?i-xsm:hlagh) に 文字列化されていましたが、(?^i:hlagh) に文字列化されるようになります。

The main purpose of this change is to allow tests that rely on the stringification not to have to change whenever new modifiers are added. See "Extended Patterns" in perlre.

この変更の主な目的は、新しい修飾子が追加されたときに変更する必要の ない 文字列化に依存したテストが行えるようにすることです。 "Extended Patterns" in perlre を参照してください。

This change is likely to break code that compares stringified regular expressions with fixed strings containing ?-xism.

この変更は、文字列化された正規表現を ?-xism を含む固定文字列と 比較しているコードを壊しそうです。

/d, /l, /u, and /a modifiers

(/d, /l, /u, /a 修飾子)

Four new regular expression modifiers have been added. These are mutually exclusive: one only can be turned on at a time.

四つの新しい正規表現修飾子が追加されました。 これらは互いに排他です: 同時には一つだけをオンにできます。

  • The /l modifier says to compile the regular expression as if it were in the scope of use locale, even if it is not.

    /l 修飾子は、use locale スコープ内でない場合でも use locale スコープ内であるかのように正規表現をコンパイルします。

  • The /u modifier says to compile the regular expression as if it were in the scope of a use feature 'unicode_strings' pragma.

    /u 修飾子は、use feature 'unicode_strings' プラグマのスコープ内に あるかのように正規表現をコンパイルします。

  • The /d (default) modifier is used to override any use locale and use feature 'unicode_strings' pragmas in effect at the time of compiling the regular expression.

    (デフォルトの) /d 修飾子は、正規表現のコンパイル時に効果のある 全ての use locale プラグマと use feature 'unicode_strings' プラグマを 上書きするために使われます。

  • The /a regular expression modifier restricts \s, \d and \w and the POSIX ([[:posix:]]) character classes to the ASCII range. Their complements and \b and \B are correspondingly affected. Otherwise, /a behaves like the /u modifier, in that case-insensitive matching uses Unicode semantics.

    /a 正規表現修飾子は \s, \d, \w および POSIX ([[:posix:]]) 文字クラスを ASCII の範囲に制限します。 それぞれの逆の効果を持つものと、\b および \B も同様に影響します。 その他では、/a/u 修飾子と同様に振る舞うので、大文字小文字を 無視するマッチングは Unicode の意味論を使います。

    If the /a modifier is repeated, then additionally in case-insensitive matching, no ASCII character can match a non-ASCII character. For example,

    /a 修飾子が繰り返されると、さらに、大文字小文字を無視するマッチングでは ASCII 文字でないものはマッチングしません。 例えば、

        "k"     =~ /\N{KELVIN SIGN}/ai
        "\xDF" =~ /ss/ai

    match but

    はマッチングしますが

        "k"    =~ /\N{KELVIN SIGN}/aai
        "\xDF" =~ /ss/aai

    do not match.

    はマッチングしません。

See "Modifiers" in perlre for more detail.

さらなる詳細については "Modifiers" in perlre を参照してください。

非破壊的置換

The substitution (s///) and transliteration (y///) operators now support an /r option that copies the input variable, carries out the substitution on the copy, and returns the result. The original remains unmodified.

置換 (s///) と変換 (y///) 演算子は、入力変数をコピーしてから 置換を行い、結果を返す /r オプションに対応しました。 元データは変更されないままです。

  my $old = "cat";
  my $new = $old =~ s/cat/dog/r;
  # $old is "cat" and $new is "dog"

This is particularly useful with map. See perlop for more examples.

これは特に map で有用です。 さらなる例については perlop を参照してください。

再入可能な正規表現エンジン

It is now safe to use regular expressions within (?{...}) and (??{...}) code blocks inside regular expressions.

正規表現の中で (?{...})(??{...}) コードブロックで 安全に正規表現を使えるようになりました。

These blocks are still experimental, however, and still have problems with lexical (my) variables and abnormal exiting.

しかし、これらのブロックはまだ実験的で、レキシカル (my) 変数では まだ問題があり、異常終了します。

use re '/flags'

(use re '/flags')

The re pragma now has the ability to turn on regular expression flags till the end of the lexical scope:

re プラグマは、レキシカルスコープの終わりまで正規表現フラグを 有効にする機能をもつようになりました:

    use re "/x";
    "foo" =~ / (.+) /;  # /x implied

See "'/flags' mode" in re for details.

詳しくは "'/flags' mode" in re を参照してください。

8 進数のための \o{...}

There is a new octal escape sequence, "\o", in doublequote-like contexts. This construct allows large octal ordinals beyond the current max of 0777 to be represented. It also allows you to specify a character in octal which can safely be concatenated with other regex snippets and which won't be confused with being a backreference to a regex capture group. See "Capture groups" in perlre.

ダブルクォート風コンテキストで使える、新しい 8 進エスケープシーケンス "\o" が導入されました。 この構造により、現在の最大である 0777 を超える 8 進数を使えるように なります。 また、安全に他の正規表現と結合でき、正規表現捕捉グループと混乱することなく、 8 進数で文字を指定できるようになりました。 "Capture groups" in perlre を参照してください。

Add \p{Titlecase} as a synonym for \p{Title}

(\p{Title} の同義語としての \p{Titlecase})

This synonym is added for symmetry with the Unicode property names \p{Uppercase} and \p{Lowercase}.

この同義語は、Unicode 特性名である \p{Uppercase} および \p{Lowercase} との対称性のために追加されました。

正規表現デバッグ出力の改良

Regular expression debugging output (turned on by use re 'debug') now uses hexadecimal when escaping non-ASCII characters, instead of octal.

(use re 'debug' で有効になる) 正規表現デバッグ表示は、 非 ASCII 文字をエスケープするときに 8 進数ではなく 16 進数を 使うようになりました。

Return value of delete $+{...}

(delete $+{...} の返り値)

Custom regular expression engines can now determine the return value of delete on an entry of %+ or %-.

カスタム正規表現エンジンは %+%- の配列に対する delete の 返り値を判定するようになりました。

文法的な拡張

配列とハッシュのコンテナ関数はリファレンスを受け付けます

Warning: This feature is considered experimental, as the exact behaviour may change in a future version of Perl.

警告: この機能は実験的と考えられているので、正確な振る舞いは将来の バージョンの Perl では変わるかもしれません。

All builtin functions that operate directly on array or hash containers now also accept unblessed hard references to arrays or hashes:

配列やハッシュのコンテナを直接操作する全ての組み込み関数は bless されていない配列やハッシュのハードリファレンスも 受け付けるようになりました。

  |----------------------------+---------------------------|
  | Traditional syntax         | Terse syntax              |
  |----------------------------+---------------------------|
  | push @$arrayref, @stuff    | push $arrayref, @stuff    |
  | unshift @$arrayref, @stuff | unshift $arrayref, @stuff |
  | pop @$arrayref             | pop $arrayref             |
  | shift @$arrayref           | shift $arrayref           |
  | splice @$arrayref, 0, 2    | splice $arrayref, 0, 2    |
  | keys %$hashref             | keys $hashref             |
  | keys @$arrayref            | keys $arrayref            |
  | values %$hashref           | values $hashref           |
  | values @$arrayref          | values $arrayref          |
  | ($k,$v) = each %$hashref   | ($k,$v) = each $hashref   |
  | ($k,$v) = each @$arrayref  | ($k,$v) = each $arrayref  |
  |----------------------------+---------------------------|
  |----------------------------+---------------------------|
  | 伝統的文法                 | 簡潔文法                  |
  |----------------------------+---------------------------|
  | push @$arrayref, @stuff    | push $arrayref, @stuff    |
  | unshift @$arrayref, @stuff | unshift $arrayref, @stuff |
  | pop @$arrayref             | pop $arrayref             |
  | shift @$arrayref           | shift $arrayref           |
  | splice @$arrayref, 0, 2    | splice $arrayref, 0, 2    |
  | keys %$hashref             | keys $hashref             |
  | keys @$arrayref            | keys $arrayref            |
  | values %$hashref           | values $hashref           |
  | values @$arrayref          | values $arrayref          |
  | ($k,$v) = each %$hashref   | ($k,$v) = each $hashref   |
  | ($k,$v) = each @$arrayref  | ($k,$v) = each $arrayref  |
  |----------------------------+---------------------------|

This allows these builtin functions to act on long dereferencing chains or on the return value of subroutines without needing to wrap them in @{} or %{}:

これにより、これらの組み込み関数は、長いデリファレンスチェーンや サブルーチンの返り値を@{}%{} で囲む必要がなくなりました:

  push @{$obj->tags}, $new_tag;  # old way
  push $obj->tags,    $new_tag;  # new way

  for ( keys %{$hoh->{genres}{artists}} ) {...} # old way 
  for ( keys $hoh->{genres}{artists}    ) {...} # new way 

単一表現プロトタイプ

The + prototype is a special alternative to $ that acts like \[@%] when given a literal array or hash variable, but will otherwise force scalar context on the argument. See "Prototypes" in perlsub.

+ プロトタイプは $ の特殊な代替物で、リテラルな配列やハッシュ変数が 与えられたときには \[@%] のように働きますが、その他の場合では 引数にスカラコンテキストを強制します。 "Prototypes" in perlsub を参照してください。

package block syntax

(package ブロック文法)

A package declaration can now contain a code block, in which case the declaration is in scope inside that block only. So package Foo { ... } is precisely equivalent to { package Foo; ... }. It also works with a version number in the declaration, as in package Foo 1.2 { ... }, which is its most attractive feature. See perlfunc.

パッケージ宣言にコードブロックを含むことができるようになりました; ただし宣言のスコープがそのブロックの内側だけの場合です。 従って、package Foo { ... } は正確に { package Foo; ... } と同じです。 これはまた、もっとも魅力のある機能である package Foo 1.2 { ... } のように 宣言でのバージョン番号でも動作します。 perlfunc を参照してください。

文ラベルはより多くの場所に置けるようになりました

Statement labels can now occur before any type of statement or declaration, such as package.

文ラベルは package など、あらゆる種類の文や宣言の前に 置けるようになりました。

スタックしたラベル

Multiple statement labels can now appear before a single statement.

一つの文の前に複数の文ラベルを置けるようになりました。

大文字の X/B を 16 進/2 進リテラルとして使えます

Literals may now use either upper case 0X... or 0B... prefixes, in addition to the already supported 0x... and 0b... syntax [perl #76296].

リテラルは、以前から対応していた 0x... および 0b... の接頭辞に 加えて、大文字の 0X... および 0B... も使えるようになりました [perl #76296]。

C, Ruby, Python, and PHP already support this syntax, and it makes Perl more internally consistent: a round-trip with eval sprintf "%#X", 0x10 now returns 16, just like eval sprintf "%#x", 0x10.

C, Ruby, Python, PHP はすでにこの文法に対応していて、Perl でも内部的に より一貫性があるようになりました: eval sprintf "%#X", 0x10 という往復は、 eval sprintf "%#x", 0x10 と同様に 16 を返します。

オーバーライド可能な tie 関数

tie, tied and untie can now be overridden [perl #75902].

tie, tied, untie はオーバーライド可能になりました [perl #75902]。

例外処理

To make them more reliable and consistent, several changes have been made to how die, warn, and $@ behave.

信頼性と一貫性の向上のために、die, warn, $@ の振る舞いが いくつか変更されました。

  • When an exception is thrown inside an eval, the exception is no longer at risk of being clobbered by destructor code running during unwinding. Previously, the exception was written into $@ early in the throwing process, and would be overwritten if eval was used internally in the destructor for an object that had to be freed while exiting from the outer eval. Now the exception is written into $@ last thing before exiting the outer eval, so the code running immediately thereafter can rely on the value in $@ correctly corresponding to that eval. ($@ is still also set before exiting the eval, for the sake of destructors that rely on this.)

    eval の中で例外が投げられたとき、例外が実行中のデストラクタコードの 巻き戻しで上書きされる可能性がなくなりました。 以前は、例外は例外処理の始めの方で $@ に書き込まれていて、もし eval が解放されるオブジェクトのデストラクタとして内部的に 使われているときに外側の eval から終了しようとしている場合、 上書きされていました。 今では例外は外側の eval を抜ける前の最後の作業として $@ に 書き込まれるので、直後に実行されるコードはその eval に対応する $@ の値を正しく利用できます。 (デストラクタがこれに依存しているかも知れないので、$@eval を 抜ける前にも設定されます。)

    Likewise, a local $@ inside an eval no longer clobbers any exception thrown in its scope. Previously, the restoration of $@ upon unwinding would overwrite any exception being thrown. Now the exception gets to the eval anyway. So local $@ is safe before a die.

    同様に eval の中の local $@ はスコープ内の例外を上書きすることは なくなりました。 以前は、巻き戻しによる $@ の復元によって、投げられた例外が 上書きされることがありました。 今では例外はとにかく eval に渡されます。 そのため、die の前の local $@ は安全です。

    Exceptions thrown from object destructors no longer modify the $@ of the surrounding context. (If the surrounding context was exception unwinding, this used to be another way to clobber the exception being thrown.) Previously such an exception was sometimes emitted as a warning, and then either was string-appended to the surrounding $@ or completely replaced the surrounding $@, depending on whether that exception and the surrounding $@ were strings or objects. Now, an exception in this situation is always emitted as a warning, leaving the surrounding $@ untouched. In addition to object destructors, this also affects any function call run by XS code using the G_KEEPERR flag.

    オブジェクトのデストラクタから投げられた例外は周りのコンテキストの $@ を変更しなくなりました。 (もし周りのコンテキストが例外の巻き戻しなら、これは投げられた例外が 上書きされるもう一つの場合でした。) 以前はこのような例外は時々例外を出力して、 (周りの $@ が文字列かオブジェクトかに依存して)周りの $@ に 文字列を追加したり、周りの $@ を完全に書き換えたりしていました。 今ではこのような状況での例外は常に警告を出力して、周りの $@ は 無変更のままになります。 オブジェクトのデストラクタに加えて、これは G_KEEPERR フラグを使った XS コードによって実行される関数呼び出しにも影響を与えます。

  • Warnings for warn can now be objects in the same way as exceptions for die. If an object-based warning gets the default handling of writing to standard error, it is stringified as before with the filename and line number appended. But a $SIG{__WARN__} handler now receives an object-based warning as an object, where previously it was passed the result of stringifying the object.

    die の例外と同じ方法で、warn の警告もオブジェクトになりました。 オブジェクトベースの警告が(標準エラーへの書き込みという)デフォルトの扱いを 受けると、今まで通り文字列化され、ファイル名と行番号が現れます。 しかし $SIG{__WARN__} ハンドラは以前はオブジェクトを文字列化した 結果を受けとっていましたが、オブジェクトとしてオブジェクトベースの 警告を受けとるようになります。

その他の拡張

Assignment to $0 sets the legacy process name with prctl() on Linux

($0 への代入は Linux では prctl() を使って伝統的なプロセス名を設定します)

On Linux the legacy process name is now set with prctl(2), in addition to altering the POSIX name via argv[0], as Perl has done since version 4.000. Now system utilities that read the legacy process name such as ps, top, and killall recognize the name you set when assigning to $0. The string you supply is truncated at 16 bytes; this limitation is imposed by Linux.

Linux では、伝統的なプロセス名は、perl が バージョン 4.000 から行っている argv[0] 経由で POSIX 名を置き換えることに加えて、prctl(2) を使って 設定されます。 ps, top, killall のような伝統的なプロセス名を読み込むシステム ユーティリティは $0 へ代入することで設定した名前を 認識するようになります。 文字列は 16 バイトで切り詰められます; これは Linux による制限です。

srand() は種を返すようになりました

This allows programs that need to have repeatable results not to have to come up with their own seed-generating mechanism. Instead, they can use srand() and stash the return value for future use. One example is a test program with too many combinations to test comprehensively in the time available for each run. It can test a random subset each time and, should there be a failure, log the seed used for that run so this can later be used to produce the same results.

これにより、再現性のある結果が必要なプログラムが独自の種生成機構を使う 必要がなくなります。 代わりに、srand() を使って、返り値を将来の利用のために 保管しておいてください。 一つの例としては実行毎に網羅的にテストを行うには組み合わせが多すぎる テストプログラムです。 毎回ランダムな部分集合をテストして、もし失敗したら、その時の種を ログに記録することで同じ結果を生成するために使えます。

printf 風の関数は 1980 年代以降のサイズ修飾子を理解します

Perl's printf and sprintf operators, and Perl's internal printf replacement function, now understand the C90 size modifiers "hh" (char), "z" (size_t), and "t" (ptrdiff_t). Also, when compiled with a C99 compiler, Perl now understands the size modifier "j" (intmax_t) (but this is not portable).

Perl の演算子 printf と sprintf、および Perl の内部の printf 代替 関数は、C90 サイズ修飾子である "hh" (char), "z" (size_t), "t" (ptrdiff_t) を認識するようになりました。 また、C99 コンパイラでコンパイルした場合、Perl はサイズ修飾子 "j" (intmax_t) を認識するようになりました(しかしこれは 互換性がありません)。

So, for example, on any modern machine, sprintf("%hhd", 257) returns "1".

それで、例えば、最近のマシンなら、sprintf('%hhd', 257) は "1" を 返します。

New global variable ${^GLOBAL_PHASE}

(新しいグローバル変数 ${^GLOBAL_PHASE})

A new global variable, ${^GLOBAL_PHASE}, has been added to allow introspection of the current phase of the Perl interpreter. It's explained in detail in "${^GLOBAL_PHASE}" in perlvar and in "BEGIN, UNITCHECK, CHECK, INIT and END" in perlmod.

新しいグローバル変数 ${^GLOBAL_PHASE} が追加され、Perl インタプリタの 現在のフェーズの内部状態がわかるようになりました。 これは "${^GLOBAL_PHASE}" in perlvar"BEGIN, UNITCHECK, CHECK, INIT and END" in perlmod で 詳しく説明されています。

-d:-foo calls Devel::foo::unimport

(-d:-fooDevel::foo::unimport を呼び出します)

The syntax -d:foo was extended in 5.6.1 to make -d:foo=bar equivalent to -MDevel::foo=bar, which expands internally to use Devel::foo 'bar'. Perl now allows prefixing the module name with -, with the same semantics as -M; that is:

The syntax -d:foo was extended in 5.6.1 to make -d:foo=bar equivalent to -MDevel::foo=bar, which expands internally to use Devel::foo 'bar'. Perl は、モジュール名の接頭辞に - を使えるようになりました; これは -M と同じ意味論です; すなわち

-d:-foo

Equivalent to -M-Devel::foo: expands to no Devel::foo and calls Devel::foo->unimport() if that method exists.

-M-Devel::foo と等価で、no Devel::foo; に拡張され、もし メソッドがあるなら Devel::foo->unimport() を呼び出します。

-d:-foo=bar

Equivalent to -M-Devel::foo=bar: expands to no Devel::foo 'bar', and calls Devel::foo->unimport("bar") if that method exists.

-M-Devel::foo=bar と等価で、no Devel::foo 'bar'; に拡張され、 もしメソッドがあるなら Devel::foo->unimport('bar') を呼び出します。

This is particularly useful for suppressing the default actions of a Devel::* module's import method whilst still loading it for debugging.

これは、Devel::* モジュールの import メソッドのデフォルトのアクションを 抑制する一方、デバッグのために読み込みたい場合に特に有用です。

Filehandle method calls load IO::File on demand

(ファイルハンドルメソッド呼び出しは IO::File をオンデマンドで読み込みます)

When a method call on a filehandle would die because the method cannot be resolved and IO::File has not been loaded, Perl now loads IO::File via require and attempts method resolution again:

ファイルハンドルへのメソッド呼び出しが、メソッドが解決できないために die し、IO::File が読み込まれていない場合、Perl は require 経由で IO::File を読み込んで、もう一度メソッド解決を試みます:

  open my $fh, ">", $file;
  $fh->binmode(":raw");     # loads IO::File and succeeds

This also works for globs like STDOUT, STDERR, and STDIN:

これはまた、STDOUT, STDERR, STDIN のようなグロブに対しても 動作します:

  STDOUT->autoflush(1);

Because this on-demand load happens only if method resolution fails, the legacy approach of manually loading an IO::File parent class for partial method support still works as expected:

このオンデマンドの読み込みはメソッド解決が失敗したときにのみ発生するので、 部分的なメソッド対応のために IO::File 親クラスを手動で読み込むという 伝統的な手法も予想通り動作します:

  use IO::Handle;
  open my $fh, ">", $file;
  $fh->autoflush(1);        # IO::File not loaded

改良された IPv6 対応

The Socket module provides new affordances for IPv6, including implementations of the Socket::getaddrinfo() and Socket::getnameinfo() functions, along with related constants and a handful of new functions. See Socket.

Socket モジュールは IPv6 に関する新しい情報を提供します; Socket::getaddrinfo() 関数と Socket::getnameinfo() 関数の実装、 関連する定数、便利な新しい関数などです。 Socket を参照してください。

DTrace プローブはパッケージ名を含むようになりました

The DTrace probes now include an additional argument, arg3, which contains the package the subroutine being entered or left was compiled in.

DTrace プローブは追加の引数 arg3 を含むようになりました; これは 出入りすることでコンパイルされたパッケージを含んでいます。

For example, using the following DTrace script:

例えば、以下の DTrace スクリプトを使って:

  perl$target:::sub-entry
  {
      printf("%s::%s\n", copyinstr(arg0), copyinstr(arg3));
  }

and then running:

実行すると:

  $ perl -e 'sub test { }; test'

DTrace will print:

DTrace は以下のように表示します:

  main::test

新しい C API

"Internal Changes" を参照してください。

セキュリティ

ユーザー定義正規表現特性

"User-Defined Character Properties" in perlunicode documented that you can create custom properties by defining subroutines whose names begin with "In" or "Is". However, Perl did not actually enforce that naming restriction, so \p{foo::bar} could call foo::bar() if it existed. The documented convention is now enforced.

"User-Defined Character Properties" in perlunicode で、"In" または "Is" で 始まる名前のサブルーチンを定義することでカスタム特性を作ることができると 文書化されています。 しかし、Perl は実際にはこの命名の制限は実行しておらず、 \p{foo::bar} が foo::bar() を(存在していれば) 呼び出していました。 文書化された規約は実行されるようになりました。

Also, Perl no longer allows tainted regular expressions to invoke a user-defined property. It simply dies instead [perl #82616].

また、Perl はユーザー定義特性を起動するのに汚染された正規表現を 使わなくなりました。 代わりに単に die します [perl #82616]。

互換性がなくなる変更

Perl 5.14.0 is not binary-compatible with any previous stable release.

Perl 5.14.0 は以前の安定リリースとバイナリ互換性はありません。

In addition to the sections that follow, see "C API Changes".

以下の章に加えて、"C API Changes" を参照してください。

正規表現と文字列のエスケープ

反転させた大かっこ文字クラスと複数文字の折り畳み

Some characters match a sequence of two or three characters in /i regular expression matching under Unicode rules. One example is LATIN SMALL LETTER SHARP S which matches the sequence ss.

いくつかの文字は、Unicode ルールでの /i 正規表現マッチングでは 2 または 3 文字の並びにマッチングします。 一つの例としては、LATIN SMALL LETTER SHARP Sss という並びに マッチングします。

 'ss' =~ /\A[\N{LATIN SMALL LETTER SHARP S}]\z/i  # Matches

This, however, can lead to very counter-intuitive results, especially when inverted. Because of this, Perl 5.14 does not use multi-character /i matching in inverted character classes.

しかしこれは、特に反転させたときに、とても非直観的な結果を導いていました。 これにより、Perl 5.14 は反転させた文字クラスでの複数文字の /i マッチングを使わなくなりました。

 'ss' =~ /\A[^\N{LATIN SMALL LETTER SHARP S}]+\z/i  # ???

This should match any sequences of characters that aren't the SHARP S nor what SHARP S matches under /i. "s" isn't SHARP S, but Unicode says that "ss" is what SHARP S matches under /i. So which one "wins"? Do you fail the match because the string has ss or accept it because it has an s followed by another s?

これは、SHARP S や、/i の元で SHARP S にマッチングしないあらゆる 文字の並びにマッチングするべきです。 "s"SHARP S ではありませんが、Unicode は /i の元では "ss"SHARP S にマッチングするとしています。 そこで、どちらが「勝つ」べきでしょうか? 文字列に ss があるという理由でマッチングは失敗するでしょうか、それとも 一つの s に匹津津井で一つの s があるので成功するでしょうか?

Earlier releases of Perl did allow this multi-character matching, but due to bugs, it mostly did not work.

Perl の以前のリリースは複数文字のマッチングを許していましたが、バグにより、 ほとんど動作していませんでした。

\400-\777

In certain circumstances, \400-\777 in regexes have behaved differently than they behave in all other doublequote-like contexts. Since 5.10.1, Perl has issued a deprecation warning when this happens. Now, these literals behave the same in all doublequote-like contexts, namely to be equivalent to \x{100}-\x{1FF}, with no deprecation warning.

ある種の環境では、正規表現中での \400-\777 の使用は、 その他の全てのダブルクォート風コンテキストでの使用と異なっていました。 5.10.1 から、Perl はこれが起きたときには非推奨警告メッセージを 出力していました。 今では、これらのリテラルは全てダブルクォート風コンテキストと同じ 振る舞いをするようになりました; つまり、\x{100}-\x{1FF} と等価で、 非推奨警告も出ません。

Use of \400-\777 in the command-line option -0 retain their conventional meaning. They slurp whole input files; previously, this was documented only for -0777.

\400-\777 のコマンドラインオプションでの使用 -0 は、 慣習的な今の意味のままです。 これは入力ファイル全体を読み込みます; 以前は、これは -0777 とだけ 文書化されていました。

Because of various ambiguities, you should use the new \o{...} construct to represent characters in octal instead.

様々なあいまいさがあるので、8 進数で文字を表現する場合は 新しい \o{...} 構文を使うべきです。

Most \p{} properties are now immune to case-insensitive matching

(ほとんどの \p{} 特性は大文字小文字なしのマッチングから免除されるようになりました)

For most Unicode properties, it doesn't make sense to have them match differently under /i case-insensitive matching. Doing so can lead to unexpected results and potential security holes. For example

ほとんどの Unicode 特性について、/i 大文字小文字無視オプションの ありなしでマッチングが変わるというのは意味がありません。 このことで予想外の結果と潜在的なセキュリティーホールを導きます。 例えば

 m/\p{ASCII_Hex_Digit}+/i

could previously match non-ASCII characters because of the Unicode matching rules (although there were several bugs with this). Now matching under /i gives the same results as non-/i matching except for those few properties where people have come to expect differences, namely the ones where casing is an integral part of their meaning, such as m/\p{Uppercase}/i and m/\p{Lowercase}/i, both of which match the same code points as matched by m/\p{Cased}/i. Details are in "Unicode Properties" in perlrecharclass.

これは以前は Unicode マッチングルールによって(これに関するいくつかのバグが ありましたが)非 ASCII 文字にマッチングします。 今では /i の下では、人々が違いを心に浮かべるようないくつかの 特性(特に m/\p{Uppercase}/i and m/\p{Lowercase}/i (どちらも m/\p{Cased}/i でマッチングする符号位置と同じものにマッチングします) のような、意味的に大文字小文字が不可欠な部分を占めるような名前のもの)を除いて、 非 /i マッチングと同じ結果となります。 詳細は "Unicode Properties" in perlrecharclass にあります。

User-defined property handlers that need to match differently under /i must be changed to read the new boolean parameter passed to them, which is non-zero if case-insensitive matching is in effect and 0 otherwise. See "User-Defined Character Properties" in perlunicode.

/i によってマッチングの結果を変える必要があるユーザー定義特性ハンドラは、 大文字小文字を無視するマッチングが有効の時には非 0、そうでない場合は 0 を 取る、新しく渡される真偽値パラメータを読むように変更しなければなりません。 "User-Defined Character Properties" in perlunicode を参照してください。

\p{} は Unicode の意味論を暗黙に使います

Specifying a Unicode property in the pattern indicates that the pattern is meant for matching according to Unicode rules, the way \N{NAME} does.

パターン中に指定された Unicode 特性マッチングは、\N{NAME} と同様、この パターンは Unicode ルールに従ってマッチングすることを 意味しているということを示すようになりました。

正規表現は展開されたときにロケール性を保持します

Regular expressions compiled under use locale now retain this when interpolated into a new regular expression compiled outside a use locale, and vice-versa.

use locale が有効な状態でコンパイルされた正規表現は、use locale の 外側でコンパイルされた新しい正規表現に展開されたときも有効のままになります (また逆も成り立ちます)。

Previously, one regular expression interpolated into another inherited the localeness of the surrounding regex, losing whatever state it originally had. This is considered a bug fix, but may trip up code that has come to rely on the incorrect behaviour.

以前は、他の正規表現に展開された正規表現はその時点でのロケール状態を 継承し、最初に持っていたロケール状態を失っていました。 これはバグ修正と考えられていますが、この正しくない振る舞いに依存していた コードをつまずかせるかもしれません。

正規表現の文字列化は変更されました

Default regular expression modifiers are now notated using (?^...). Code relying on the old stringification will fail. This is so that when new modifiers are added, such code won't have to keep changing each time this happens, because the stringification will automatically incorporate the new modifiers.

デフォルトの正規表現修飾子は (?^...) を使って 記録されるようになりました。 古い文字列化に依存しているコードは動きません。 これは、文字列化は自動的に新しい修飾子に組み込まれるので、 これが起きる度に変更し続ける必要をなくすためです。

Code that needs to work properly with both old- and new-style regexes can avoid the whole issue by using (for perls since 5.9.5; see re):

旧方式と新方式の正規表現の両方で正しく動作する必要のあるコードでは、 (perl 5.9.5 以降では; re 参照) 以下のものを使って問題全体を 回避できます:

 use re qw(regexp_pattern);
 my ($pat, $mods) = regexp_pattern($re_ref);

If the actual stringification is important or older Perls need to be supported, you can use something like the following:

もし実際の文字列化が重要であるか、より古い Perl に対応する必要が ある場合は、以下のような方法が使えます:

    # Accept both old and new-style stringification
    my $modifiers = (qr/foobar/ =~ /\Q(?^/) ? "^" : "-xism";

And then use $modifiers instead of -xism.

それから -xism のかわりに $modifiers を使います。

正規表現内の実行時コードブロックはプラグマを継承します

Code blocks in regular expressions ((?{...}) and (??{...})) previously did not inherit pragmata (strict, warnings, etc.) if the regular expression was compiled at run time as happens in cases like these two:

正規表現中のコードブロック ((?{...})(??{...})) は、 以前は正規表現が実行中に以下の二つのような状態になった場合に全ての プラグマ(strict, warnings など) が継承されていませんでした:

  use re "eval";
  $foo =~ $bar; # when $bar contains (?{...})
  $foo =~ /$bar(?{ $finished = 1 })/;

This bug has now been fixed, but code that relied on the buggy behaviour may need to be fixed to account for the correct behaviour.

このバグは修正されましたが、 このバグっぽい振る舞いに依存しているコードは正しい振る舞いに 対応するように修正する必要があるかも知れません。

スタッシュとパッケージ変数

ローカル化された tie されたハッシュと配列はもう tie しません

In the following:

以下のような場合:

    tie @a, ...;
    {
            local @a;
            # here, @a is a now a new, untied array
    }
    # here, @a refers again to the old, tied array

Earlier versions of Perl incorrectly tied the new local array. This has now been fixed. This fix could however potentially cause a change in behaviour of some code.

以前のバージョンの Perl では間違って新しいローカルな配列を tie していました。 これは修正されました。 しかしこの修正によってコードの振る舞いの変化を引き起こすかも知れません。

スタッシュはいつも定義されるようになりました

defined %Foo:: now always returns true, even when no symbols have yet been defined in that package.

defined %Foo:: は、例えこのパッケージでまだ何のシンボルも 定義されていなくても、常に真を返します。

This is a side-effect of removing a special-case kludge in the tokeniser, added for 5.10.0, to hide side-effects of changes to the internal storage of hashes. The fix drastically reduces hashes' memory overhead.

これは、5.10.0 で追加された、ハッシュの内部ストレージの変更の副作用を 隠すためのトークナイザの特別な場合のその場しのぎの副作用です。 この修正はハッシュのメモリオーバーヘッドを劇的に減少させます。

Calling defined on a stash has been deprecated since 5.6.0, warned on lexicals since 5.6.0, and warned for stashes and other package variables since 5.12.0. defined %hash has always exposed an implementation detail: emptying a hash by deleting all entries from it does not make defined %hash false. Hence defined %hash is not valid code to determine whether an arbitrary hash is empty. Instead, use the behaviour of an empty %hash always returning false in scalar context.

スタッシュに対して defined を呼び出すことは 5.6.0 から非推奨になり、 レキシカルでは 5.6.0 から警告が出力され、スタッシュとその他の パッケージ変数に対しては 5.12.0 から警告を出していました。 defined %hash は常に実装の詳細を露出させていました: 全てのエントリを削除することでハッシュを空にしても defined %hash は偽になりませんでした。 従って、defined %hash は、任意のハッシュが空かどうかを判定するには 不正なコードです。 代わりに、空の %hash はスカラコンテキストでは常に偽を返すという 振る舞いを使ってください。

スタッシュのクリア

Stash list assignment %foo:: = () used to make the stash temporarily anonymous while it was being emptied. Consequently, any of its subroutines referenced elsewhere would become anonymous, showing up as "(unknown)" in caller. They now retain their package names such that caller returns the original sub name if there is still a reference to its typeglob and "foo::__ANON__" otherwise [perl #79208].

スタッシュリスト代入 %foo:: = () は、一時的に無名の空のスタッシュを 作っていました。 その結果、どこかでリファレンスされているサブルーチンも無名になり、 caller では "(unknown)" になります。 今ではパッケージ名を保持するようになったので、caller は型グロブへの リファレンスがあれば元のサブルーチン名を、さもなければ "foo::__ANON__" を返します [perl #79208]。

型グロブのデリファレンス

If you assign a typeglob to a scalar variable:

型グロブをスカラ変数に代入すると:

    $glob = *foo;

the glob that is copied to $glob is marked with a special flag indicating that the glob is just a copy. This allows subsequent assignments to $glob to overwrite the glob. The original glob, however, is immutable.

$glob にコピーされたグロブは、このグロブが単なるコピーであることを 示す特別なフラグが付けられます。 これにより、引き続く $glob への代入によってグロブを上書きできます。 しかし、元のグロブは変更されません。

Some Perl operators did not distinguish between these two types of globs. This would result in strange behaviour in edge cases: untie $scalar would not untie the scalar if the last thing assigned to it was a glob (because it treated it as untie *$scalar, which unties a handle). Assignment to a glob slot (such as *$glob = \@some_array) would simply assign \@some_array to $glob.

一部の Perl 演算子はこの2種類のグロブを区別していませんでした。 これにより、エッジケースでは不思議な振る舞いを見せていました: untie $scalar は、最後に代入されたものがグロブの場合はスカラを untie しませんでした (なぜならこれはハンドルを untie する untie *$scalar として扱われるからです)。 (*$glob = \@some_array のような) グロブスロットへの代入は単に \@some_array$glob に代入します。

To fix this, the *{} operator (including its *foo and *$foo forms) has been modified to make a new immutable glob if its operand is a glob copy. This allows operators that make a distinction between globs and scalars to be modified to treat only immutable globs as globs. (tie, tied and untie have been left as they are for compatibility's sake, but will warn. See "Deprecations".)

これを修正するために、*{} 演算子 (*foo*$foo の 形式を含みます) は、もしオペランドがグロブのコピーなら新しい変更不能の グロブを作るように修正されました。 これにより、演算子がグロブとスカラを修正するときの区別は、変更不能のグロブを グロブとして扱うだけになりました。 (tie, tied, untie は、互換性の理由によりそのまま残されましたが、 警告が出ます。 "Deprecations" を参照してください。)

This causes an incompatible change in code that assigns a glob to the return value of *{} when that operator was passed a glob copy. Take the following code, for instance:

これは、演算子がグロブのコピーを渡すときに *{} の返り値をグロブに 代入するコードでは非互換の変更になります。 例えば、以下のようなコードの場合:

    $glob = *foo;
    *$glob = *bar;

The *$glob on the second line returns a new immutable glob. That new glob is made an alias to *bar. Then it is discarded. So the second assignment has no effect.

2 行目の *$glob は新しい変更不能のグロブを返します。 新しいグロブは *bar への別名として作られます。 それからこれは捨てられます。 従って、2 行目の代入では何も起こりません。

さらなる詳細については http://rt.perl.org/rt3/Public/Bug/Display.html?id=77810 を 参照してください。

main パッケージ外のマジカル変数

In previous versions of Perl, magic variables like $!, %SIG, etc. would "leak" into other packages. So %foo::SIG could be used to access signals, ${"foo::!"} (with strict mode off) to access C's errno, etc.

Perl の以前のバージョンでは、 $!, %SIG などのようなマジカル変数は 他のパッケージへ「漏洩」していました。 それで %foo::SIG がシグナルのアクセスに使えたり、 (strict モードがオフなら) ${"foo::!"} (with strict mode off) が C の errno へのアクセスに使えたり、などです。

This was a bug, or an "unintentional" feature, which caused various ill effects, such as signal handlers being wiped when modules were loaded, etc.

これはバグ、あるいは「想定外の」機能でした; これにより、モジュールが 読み込まれるときにシグナルハンドラがクリアされるといったさまざまな 悪影響を引き起こしていました。

This has been fixed (or the feature has been removed, depending on how you see it).

これは修正されました (あるいは見方によっては、この機能は取り除かれました)。

local($_) は $_ から全てのマジカルな機能を取り去ります

local() on scalar variables gives them a new value but keeps all their magic intact. This has proven problematic for the default scalar variable $_, where perlsub recommends that any subroutine that assigns to $_ should first localize it. This would throw an exception if $_ is aliased to a read-only variable, and could in general have various unintentional side-effects.

スカラ変数に local() を行うと新しい値が与えられますが、全てのマジカルな 機能はそのままでした。 perlsub はデフォルトスカラ変数 $_ に代入する全てのサブルーチンはまず ローカル化することを勧めていますが、$_ に対しては問題があることが 判明しています。 これにより、もし $_ が読み込み専用変数の別名となっていると例外が 投げられ、一般的には様々な想定外の副作用があります。

Therefore, as an exception to the general rule, local($_) will not only assign a new value to $_, but also remove all existing magic from it as well.

従って、一般的なルールへの例外として、local($_)は $_ に新しい値を 代入するだけでなく、全てのマジカルな機能が取り除かれるようになりました。

パッケージ名と変数名のパース

Parsing the names of packages and package variables has changed: multiple adjacent pairs of colons, as in foo::::bar, are now all treated as package separators.

パッケージ名とパッケージ変数のパースが変わりました: foo::::bar のような連続するコロンの組は、全てパッケージセパレータとして 扱われます。

Regardless of this change, the exact parsing of package separators has never been guaranteed and is subject to change in future Perl versions.

この変更に関係なく、パッケージセパレータの正確なパースは保証されず、 将来のバージョンの Perl では変更される可能性があります。

文法や Perl の演算子の変更

given return values

(given の返り値)

given blocks now return the last evaluated expression, or an empty list if the block was exited by break. Thus you can now write:

given ブロックは最後に評価した式を返すようになりました (ブロックが break で終了した場合は空リストを返します)。 従って、以下のように書けるようになりました:

    my $type = do {
     given ($num) {
      break     when undef;
      "integer" when /^[+-]?[0-9]+$/;
      "float"   when /^[+-]?[0-9]+(?:\.[0-9]+)?$/;
      "unknown";
     }
    };

See "Return value" in perlsyn for details.

詳しくは "Return value" in perlsyn を参照してください。

ある種のプロトタイプのパースの変更

Functions declared with the following prototypes now behave correctly as unary functions:

以下のプロトタイプで宣言された関数は、正しく単項関数として 振る舞うようになりました:

  *
  \$ \% \@ \* \&
  \[...]
  ;$ ;*
  ;\$ ;\% etc.
  ;\[...]

Due to this bug fix [perl #75904], functions using the (*), (;$) and (;*) prototypes are parsed with higher precedence than before. So in the following example:

このバグ修正 [perl #75904] により、(*), (;$), (;*) プロトタイプを 使った関数は以前より高い優先順位でパースされます。 従って、以下のようなコードは:

  sub foo(;$);
  foo $a < $b;

the second line is now parsed correctly as foo($a) < $b, rather than foo($a < $b). This happens when one of these operators is used in an unparenthesised argument:

2 行目は foo($a < $b) ではなく、正しく foo($a) < $b と パースされます。 これはかっこなしの引数で以下の演算子のいずれかが使われたときに起こります:

  < > <= >= lt gt le ge
  == != <=> eq ne cmp ~~
  &
  | ^
  &&
  || //
  .. ...
  ?:
  = += -= *= etc.
  , =>

配列スライスに対するスマートマッチング

Previously, the following code resulted in a successful match:

以前は、以下のコードはマッチングに成功していました:

    my @a = qw(a y0 z);
    my @b = qw(a x0 z);
    @a[0 .. $#b] ~~ @b;

This odd behaviour has now been fixed [perl #77468].

このおかしな振る舞いは修正されました [perl #77468]。

否定は文字列を以前より異なったものとして扱います

The unary negation operator, -, now treats strings that look like numbers as numbers [perl #57706].

単項否定演算子 - は数値のように見える文字列を数値として扱うように なりました [perl #57706]。

負数のゼロ

Negative zero (-0.0), when converted to a string, now becomes "0" on all platforms. It used to become "-0" on some, but "0" on others.

負数のゼロ (-0.0) は、文字列に変換したとき、どのプラットフォームでも "0" になるようになりました。 以前はプラットフォームによって "-0" だったり "0" だったりしていました。

If you still need to determine whether a zero is negative, use sprintf("%g", $zero) =~ /^-/ or the Data::Float module on CPAN.

未だにゼロが負数かどうかを決定したい場合は、 sprintf("%g", $zero) =~ /^-/ とするか、CPAN にある Data::Float モジュールを使ってください。

:= is now a syntax error

(:= は文法エラーになりました)

Previously my $pi := 4 was exactly equivalent to my $pi : = 4, with the : being treated as the start of an attribute list, ending before the =. The use of := to mean : = was deprecated in 5.12.0, and is now a syntax error. This allows future use of := as a new token.

今までは、my $pi := 4 は正確に my $pi : = 4 と等価でした; : で属性リストが開始し、= の前で終了していると扱われていました。 : = の意味となる := の使い方は 5.12.0 では非推奨となり、 今回文法エラーとなりました。 これにより、将来 := を新しいトークンとして使えるようになります。

Outside the core's tests for it, we find no Perl 5 code on CPAN using this construction, so we believe that this change will have little impact on real-world codebases.

これのためのコアのテスト以外、CPAN にこの構造を使っている Perl 5 の コードはありませんでした。 実際の世界のコードベースではほとんど影響を与えないと信じています。

If it is absolutely necessary to have empty attribute lists (for example, because of a code generator), simply avoid the error by adding a space before the =.

(例えば、コードジェネレータのために) 空の要素リストがどうしても必要な場合は、 単に = の前に空白を追加することでエラーを回避してください。

識別子のパースの変更

Characters outside the Unicode "XIDStart" set are no longer allowed at the beginning of an identifier. This means that certain accents and marks that normally follow an alphabetic character may no longer be the first character of an identifier.

Unicode の "XIDStart" 集合外の文字は識別子の先頭としてはもはや 許されなくなりました。 これは、普通は英文字に引き続くある種のアクセントやマークはもはや 識別子の最初の文字にはならないことを意味します。

スレッドとプロセス

ディレクトリハンドルはスレッドにコピーされません

On systems other than Windows that do not have a fchdir function, newly-created threads no longer inherit directory handles from their parent threads. Such programs would usually have crashed anyway [perl #75154].

Windows 以外で fchdir 関数のないシステムでは、新しく作られたスレッドが 親スレッドからディレクトリハンドルを継承しなくなりました。 このようなプログラムはどちらにしろ普通はクラッシュします[perl #75154]。

close on shared pipes

(共有されたパイプに対する close)

To avoid deadlocks, the close function no longer waits for the child process to exit if the underlying file descriptor is still in use by another thread. It returns true in such cases.

デッドロックを避けるために、close 関数は、もし基となるファイル記述子が 他のスレッドで使われている場合は、子プロセスの終了を待たなくなりました。 このような場合は真を返します。

fork() エミュレーションはシグナルを送られた子プロセスを待ちません

On Windows parent processes would not terminate until all forked children had terminated first. However, kill("KILL", ...) is inherently unstable on pseudo-processes, and kill("TERM", ...) might not get delivered if the child is blocked in a system call.

Windows では、親プロセスはフォークした子プロセスが全て終了するまで 終了しません。 しかし、kill("KILL", ...) は本質的に疑似プロセスにとっては不安定で、 kill("TERM", ...) は、子プロセスがシステムコールでブロックしているときは 配達されないかもしれません。

To avoid the deadlock and still provide a safe mechanism to terminate the hosting process, Perl now no longer waits for children that have been sent a SIGTERM signal. It is up to the parent process to waitpid() for these children if child-cleanup processing must be allowed to finish. However, it is also then the responsibility of the parent to avoid the deadlock by making sure the child process can't be blocked on I/O.

デッドロックを避けつつ、ホスティングプロセスを終了するための安全な 機構を提供するために、SIGTERM シグナルを送られた子プロセスを 待たなくなりました。 これは、子プロセスの後片付け処理が終了できるようにしなければならない 場合にこれらの子プロセスに waitpid() をする親プロセス次第です。 しかし、子プロセスが I/O をブロックできないことを確実にすることで デッドロックを避けるために親が責任を持ちます。

See perlfork for more information about the fork() emulation on Windows.

Windows での fork() エミュレーションに関するさらなる情報については perlfork を参照してください。

設定

Policy_sh.SH の命名の修正によって Policy.sh が不正になりました

Several long-standing typos and naming confusions in Policy_sh.SH have been fixed, standardizing on the variable names used in config.sh.

Policy_sh.SH での、いくつの長年のタイプミスと命名の混乱が修正され、 config.sh で使われる変数名が正規化されました。

This will change the behaviour of Policy.sh if you happen to have been accidentally relying on its incorrect behaviour.

これは、この間違ったふるまいに偶然依存している場合の Policy.sh の 振る舞いが変更されます。

Windows では Perl ソースコードをテキストモードで読み込みます

Perl scripts used to be read in binary mode on Windows for the benefit of the ByteLoader module (which is no longer part of core Perl). This had the side-effect of breaking various operations on the DATA filehandle, including seek()/tell(), and even simply reading from DATA after filehandles have been flushed by a call to system(), backticks, fork() etc.

Perl スクリプトは、Windows では ByteLoader モジュール (もはや コア Perl の一部ではありません) のメリットを使うためにバイナリモードで 読み込まれていました。 これは、DATA ファイルハンドルに対する seek()/tell() および 単に system(), 逆クォート, fork() などの呼び出しによってファイルハンドルが フラッシュした後に DATA からの読み込みを含む様々な操作を 壊すという副作用がありました。

The default build options for Windows have been changed to read Perl source code on Windows in text mode now. ByteLoader will (hopefully) be updated on CPAN to automatically handle this situation [perl #28106].

Windows でのデフォルトのビルドオプションは、Windows では Perl の ソースコードをテキストモードで読み込むように変更されました。 ByteLoader が(出来れば)この状況を自動的に扱えるように CPAN で更新されます [perl #28106]。

廃止予定

"Deprecated C APIs" も参照してください。

正規表現と引き続く単語の間の空白の省略

Omitting the space between a regular expression operator or its modifiers and the following word is deprecated. For example, m/foo/sand $bar is for now still parsed as m/foo/s and $bar, but will now issue a warning.

正規表現演算子やその修飾子と、引き続く単語の間の空白を省略することは 非推奨となりました。 例えば、m/foo/sand $bar はまだ m/foo/s and $bar と パースされますが、警告が出ます。

\cX

(\cX)

The backslash-c construct was designed as a way of specifying non-printable characters, but there were no restrictions (on ASCII platforms) on what the character following the c could be. Now, a deprecation warning is raised if that character isn't an ASCII character. Also, a deprecation warning is raised for "\c{" (which is the same as simply saying ";").

バックスラッシュ-c 構造は表示できない文字を指定する方法として 設計されましたが、(ASCII プラットフォームでは) c に引き続く文字に 制限はありませんでした。 この文字が ASCII 文字でない場合は非推奨警告が出るようになりました。 また、"\c{" (これは単に ";" と書くのと同じです) でも非推奨警告が出ます。

"\b{" and "\B{"

("\b{""\B{")

In regular expressions, a literal "{" immediately following a "\b" (not in a bracketed character class) or a "\B{" is now deprecated to allow for its future use by Perl itself.

正規表現において、リテラルの "{" の(大かっこの文字クラスの中でなく)直後に "\b""\B{" を続けることは、Perl 自身が将来使えるようにするために、 非推奨となりました。

Perl 4 時代の .pl ライブラリ

Perl bundles a handful of library files that predate Perl 5. This bundling is now deprecated for most of these files, which are now available from CPAN. The affected files now warn when run, if they were installed as part of the core.

Perl は Perl 5 より前のライブラリファイルを少量同梱しています。 同梱ファイルのほとんどは(今では CPAN から利用可能ですが) 非推奨となりました。 影響を受けるファイルは、コアの一部としてインストールされている場合は 実行時に警告が出るようになりました。

This is a mandatory warning, not obeying -X or lexical warning bits. The warning is modelled on that supplied by deprecate.pm for deprecated-in-core .pm libraries. It points to the specific CPAN distribution that contains the .pl libraries. The CPAN versions, of course, do not generate the warning.

これは -X やレキシカルな警告ビットに従うのではなく、強制的な警告です。 この警告は、コアで非推奨となった .pm ライブラリのための deprecate.pm によって供給されます。 これは .pl ライブラリを含んでいる特定の CPAN 配布を示しています。 もちろん、CPAN 版は警告は出ません。

List assignment to $[

($[ へのリスト代入)

Assignment to $[ was deprecated and started to give warnings in Perl version 5.12.0. This version of Perl (5.14) now also emits a warning when assigning to $[ in list context. This fixes an oversight in 5.12.0.

$[ への代入は Perl バージョン 5.12.0 から非推奨となり、警告が出ます。 このバージョン (5.14) の Perl はまた、リストコンテキストでの $[ への代入も 警告を出すようになりました。 これは 5.12.0 での見落としを修正します。

かっことしての qw(...) の使用

Historically the parser fooled itself into thinking that qw(...) literals were always enclosed in parentheses, and as a result you could sometimes omit parentheses around them:

歴史的に、パーサは qw(...) リテラルは常にかっこに囲まれていると考えるように 自分をだましていて、結果として、時々それらの周りのかっこを省略できました:

    for $x qw(a b c) { ... }

The parser no longer lies to itself in this way. Wrap the list literal in parentheses like this:

パーサはもはや自分自身をこの方法でだましません。 以下のように、リストリテラルをかっこで囲んでください:

    for $x (qw(a b c)) { ... }

This is being deprecated because the parentheses in for $i (1,2,3) { ... } are not part of expression syntax. They are part of the statement syntax, with the for statement wanting literal parentheses. The synthetic parentheses that a qw expression acquired were only intended to be treated as part of expression syntax.

これは、for $i (1,2,3) { ... } のかっこは式の文法の一部ではないので、 非推奨となりました。 これは文の文法の一部で、for 文はリテラルなかっこが必要です。 qw 式が要求する合成されたかっこは、式文法の一部として扱うことを 対象としているだけです。

Note that this does not change the behaviour of cases like:

これは以下のような場合の振る舞いは変更しないことに注意してください:

    use POSIX qw(setlocale localeconv);
    our @EXPORT = qw(foo bar baz);

where parentheses were never required around the expression.

ここでは式の回りにかっこは不要です。

\N{BELL}

(\N{BELL})

This is because Unicode is using that name for a different character. See "Unicode Version 6.0 is now supported (mostly)" for more explanation.

これは、Unicode がこの名前を違う文字に使っているからです。 さらなる説明については "Unicode Version 6.0 is now supported (mostly)" を 参照してください。

?PATTERN?

(?PATTERN?)

?PATTERN? (without the initial m) has been deprecated and now produces a warning. This is to allow future use of ? in new operators. The match-once functionality is still available as m?PATTERN?.

(最初の m のない) ?PATTERN? は非推奨となり、警告を出すようになりました。 これは、将来 ? を新しい演算子として使えるようにするためです。 一度だけマッチングする機能は今でも m?PATTERN? として利用可能です。

型グロブを保持しているスカラに対する tie 関数

Calling a tie function (tie, tied, untie) with a scalar argument acts on a filehandle if the scalar happens to hold a typeglob.

tie 関数 (tie, tied, untie) をスカラ引数で呼び出すと、 もしそのスカラがたまたま型グロブを保持していた場合はファイルハンドルに対して 動作します。

This is a long-standing bug that will be removed in Perl 5.16, as there is currently no way to tie the scalar itself when it holds a typeglob, and no way to untie a scalar that has had a typeglob assigned to it.

これは Perl 5.16 で削除される予定の長年のバグです; 型グロブを保持している スカラ自身を tie する方法がなく、型グロブを代入されたスカラを untie する方法もないからです。

Now there is a deprecation warning whenever a tie function is used on a handle without an explicit *.

tie 関数が明示的な * なしにハンドルに対して使われると、非推奨警告が 出るようになりました。

ユーザー定義の大文字小文字定義

This feature is being deprecated due to its many issues, as documented in "User-Defined Case Mappings (for serious hackers only)" in perlunicode. This feature will be removed in Perl 5.16. Instead use the CPAN module Unicode::Casing, which provides improved functionality.

この機能は "User-Defined Case Mappings (for serious hackers only)" in perlunicode に 文書化されているように多くの問題を抱えているので、非推奨となりました。 この機能は Perl 5.16 で削除されます。 代わりに、改良された機能を提供する、CPAN モジュール Unicode::Casing を 使ってください。

非推奨モジュール

The following module will be removed from the core distribution in a future release, and should be installed from CPAN instead. Distributions on CPAN that require this should add it to their prerequisites. The core version of these module now issues a deprecation warning.

以下のモジュールは将来のリリースではコア配布からは取り除かれ、 代わりに CPAN からインストールするようになります。 CPAN での配布物のでこのモジュールが必要な場合は、事前条件に追加する 必要があります。 これらのモジュールのコア版は、非推奨警告を発生させます。

If you ship a packaged version of Perl, either alone or as part of a larger system, then you should carefully consider the repercussions of core module deprecations. You may want to consider shipping your default build of Perl with a package for the deprecated module that installs into vendor or site Perl library directories. This will inhibit the deprecation warnings.

単独、あるいはより大きいシステムの一部として、パッケージ版の Perl を 出荷する場合、非推奨のコアモジュールの影響を注意深く検討するべきです。 非推奨モジュールを perl ライブラリディレクトリ vendorsite にインストールして Perl のデフォルトビルドを 出荷したいかもしれません。 これは非推奨警告を抑制します。

Alternatively, you may want to consider patching lib/deprecate.pm to provide deprecation warnings specific to your packaging system or distribution of Perl, consistent with how your packaging system or distribution manages a staged transition from a release where the installation of a single package provides the given functionality, to a later release where the system administrator needs to know to install multiple packages to get that same functionality.

あるいは、lib/deprecate.pm にパッチを当てて、 あなたのパッケージシステムや配布が、単一のパッケージのインストールがある 機能を提供するリリースから、同じ機能を得るために複数のパッケージを インストールすることをシステム管理者が知る必要があるより新しいリリースへの 段階的な移行する方法と一貫した、あなたのパッケージシステムや Perl の配布に固有の警告メッセージを提供したいかもしれません。

You can silence these deprecation warnings by installing the module in question from CPAN. To install the latest version of it by role rather than by name, just install Task::Deprecations::5_14.

モジュールを CPAN からインストールすることによって、非推奨警告を 消すことができます。 これら全ての最新版をインストールするには、単に Task::Deprecations::5_14 をインストールしてください。

Devel::DProf

We strongly recommend that you install and use Devel::NYTProf instead of Devel::DProf, as Devel::NYTProf offers significantly improved profiling and reporting.

Devel::Dprof の代わりに Devel::NYTProf をインストールして使うことを 強く推奨します; Devel::NYTProf は著しく改良されたプロファイリングと報告を提供します。

性能の改善

「安全なシグナル」の最適化

Signal dispatch has been moved from the runloop into control ops. This should give a few percent speed increase, and eliminates nearly all the speed penalty caused by the introduction of "safe signals" in 5.8.0. Signals should still be dispatched within the same statement as they were previously. If this does not happen, or if you find it possible to create uninterruptible loops, this is a bug, and reports are encouraged of how to recreate such issues.

シグナル発行は実行ループから制御 op に移動しました。 これにより、速度が数 % 向上し、5.8.0 で導入された「安全なシグナル」による 速度の低下のほとんど全てを取り除けているはずです。 シグナルは以前と同じように、同じ文の中で発行されます。 もしこれが 起こらない か、あるいはもし中断不能なループが作成できることを 発見したなら、それはバグです; 問題を再現する方法を報告してください。

引数なしの shift() と pop() の最適化

Two fewer OPs are used for shift() and pop() calls with no argument (with implicit @_). This change makes shift() 5% faster than shift @_ on non-threaded perls, and 25% faster on threaded ones.

引数なしの (@_ が使われる) shift() と pop() の呼び出しでは使われる op が二つ少なくなりました。 この変更により、shift @_ と比べて shift() はスレッドなし perl で 5%、スレッド化 perl で 25 % 速くなります。

正規表現の文字列比較作業の最適化

The foldEQ_utf8 API function for case-insensitive comparison of strings (which is used heavily by the regexp engine) was substantially refactored and optimised -- and its documentation much improved as a free bonus.

(正規表現エンジンによって激しく利用される)大文字小文字を無視した文字列 比較を行う foldEQ_utf8 API 関数は大幅にリファクタリングされ 最適化されました - そしておまけとしてドキュメントが大幅に向上しました。

正規表現のコンパイルの高速化

Compiling regular expressions has been made faster when upgrading the regex to utf8 is necessary but this isn't known when the compilation begins.

正規表現を utf8 に昇格する必要があるけれどもコンパイル開始時には 分かっていなかった場合の正規表現のコンパイルが高速化されました。

文字列追加は 100 倍速くなりました

When doing a lot of string appending, perls built to use the system's malloc could end up allocating a lot more memory than needed in a inefficient way.

多くの文字列追加を行うとき、システムの malloc 実装を使うように ビルドされている perl は、最終的に必要な分よりもとても 多くのメモリを非効率な方法で割り当ててしまうことがありました。

sv_grow, the function used to allocate more memory if necessary when appending to a string, has been taught to round up the memory it requests to a certain geometric progression, making it much faster on certain platforms and configurations. On Win32, it's now about 100 times faster.

文字列を追加するときにもし必要ならより多くのメモリを割り当てていた sv_grow 関数は、ある種の等比級数に切り上げたメモリを伝えるようになり、 特定のプラットフォームと設定ではとても早くなりました。 Win32 では、これは約 100 倍高速です。

Eliminate PL_* accessor functions under ithreads

(iスレッドでの PL_* アクセサ関数の削除)

When MULTIPLICITY was first developed, and interpreter state moved into an interpreter struct, thread- and interpreter-local PL_* variables were defined as macros that called accessor functions (returning the address of the value) outside the Perl core. The intent was to allow members within the interpreter struct to change size without breaking binary compatibility, so that bug fixes could be merged to a maintenance branch that necessitated such a size change. This mechanism was redundant and penalised well-behaved code. It has been removed.

MULTIPLICITY が最初に開発され、インタプリタの状態が interpreter 構造体に 移動したとき、スレッドとインタプリタローカルな PL_* 変数は、 アクセサ関数を呼び出して perl コアの外側のアドレスを返すマクロとして 定義されていました。 この目的は、バイナリ互換性を壊すことなく interpreter 構造体にある メンバのサイズを変えられるようにすることでした; それでバグ修正はそのようなサイズ変更が必要なメンテナンスブランチに マージできるようになっていました。 この機構は冗長であり、正しい振る舞いをするコードがこれによって ペナルティを受けていました。 これは削除されました。

弱い参照の解放

When there are many weak references to an object, freeing that object can under some circumstances take O() time to free, where N is the number of references. The circumstances in which this can happen have been reduced [perl #75254]

あるオブジェクトに多くの弱い参照があると、そのオブジェクトを解放するときに 状況によっては O() (N は参照の数) の時間がかかることが ありました。 そうなる状況の数は減少しました [perl #75254]。

レキシカルな配列やハッシュへの代入

An earlier optimisation to speed up my @array = ... and my %hash = ... assignments caused a bug and was disabled in Perl 5.12.0.

my @array = ...my %hash = ... の代入を高速化するために 以前行われた最適化はバグを引き起こしていたので Perl 5.12.0 で 無効化されました。

Now we have found another way to speed up these assignments [perl #82110].

このような代入を高速化する新しい方法が発見されました [perl #82110]。

@_ uses less memory

(@_ のメモリ消費が減りました)

Previously, @_ was allocated for every subroutine at compile time with enough space for four entries. Now this allocation is done on demand when the subroutine is called [perl #72416].

以前は、@_ の割り当ては四つのエントリに十分なスペースで全ての サブルーチンに対してコンパイル時に行われていました。 この割り当てはサブルーチンが呼び出されるときにオンデマンドで 行われるようになりました [perl #72416]。

SV 構造体と HV 構造体のサイズ最適化

xhv_fill has been eliminated from struct xpvhv, saving 1 IV per hash and on some systems will cause struct xpvhv to become cache-aligned. To avoid this memory saving causing a slowdown elsewhere, boolean use of HvFILL now calls HvTOTALKEYS instead (which is equivalent), so while the fill data when actually required are now calculated on demand, cases when this needs to be done should be rare.

xhv_fillstruct xpvhv から削除され、ハッシュ毎に 1 IV 節約される ことにより、システムによっては struct xpvhv がキャッシュ境界に 一致するようになりました。 このメモリ節約が他の場所での低速化を引き起こすことを避けるために、 HvFILL の真偽値での使用は代わりに (等価である) HvTOTALKEYS を 使うようになりました; それで実際に必要なときに埋められるデータは オンデマンドで計算されるようになりましたが、これが必要になるような状況は 稀なはずです。

The order of structure elements in SV bodies has changed. Effectively, the NV slot has swapped location with STASH and MAGIC. As all access to SV members is via macros, this should be completely transparent. This change allows the space saving for PVHVs documented above, and may reduce the memory allocation needed for PVIVs on some architectures.

SV ボディの構造体要素の順番が変更されました。 事実上は、NV スロットが STASH および MAGIC の位置と交換されました。 SV メンバへの全てのアクセスはマクロ経由なので、これは完全に透過的です。 この変更により、上述した PVHV のスペース節約が可能になり、 アーキテクチャによっては PVIV に必要なメモリ割り当てが減少します。

XPV, XPVIV, and XPVNV now allocate only the parts of the SV body they actually use, saving some space.

XPV, XPVIV, XPVNV は実際に使用される SV ボディの一部としてのみ 割り当てられるようになり、スペースが節約されます。

Scalars containing regular expressions now allocate only the part of the SV body they actually use, saving some space.

正規表現を含むスカラは実際に使用される SV ボディの一部としてのみ 割り当てられるようになり、スペースが節約されます。

Exporter のメモリ消費の改善

The @EXPORT_FAIL AV is no longer created unless needed, hence neither is the typeglob backing it. This saves about 200 bytes for every package that uses Exporter but doesn't use this functionality.

@EXPORT_FAIL AV は必要になるまで作成されなくなり、従ってどちらもそれに もどる型グロブではありません。 これにより、Exporter を使うけれどもこの機能を使わないパッケージ毎に 200 バイトほど節約できます。

弱い参照のメモリ節約

For weak references, the common case of just a single weak reference per referent has been optimised to reduce the storage required. In this case it saves the equivalent of one small Perl array per referent.

弱い参照については、参照先毎に一つだけの弱い参照というよくあるケースでは 必要なメモリを減らすように最適化されました。 この場合、参照先毎に等価な一つの小さな Perl 配列を節約できます。

%+ and %- use less memory

(%+%- のメモリ消費が減りました)

The bulk of the Tie::Hash::NamedCapture module used to be in the Perl core. It has now been moved to an XS module to reduce overhead for programs that do not use %+ or %-.

Tie::Hash::NamedCapture モジュールの塊が Perl コアで使われていました。 これは XS モジュールに移動し、%+%- を使わないプログラムのための オーバーヘッドが減少しました。

スレッドに関する複数の小さな改善

The internal structures of threading now make fewer API calls and fewer allocations, resulting in noticeably smaller object code. Additionally, many thread context checks have been deferred so they're done only as needed (although this is only possible for non-debugging builds).

スレッドのための内部構造体は API 呼び出しと割り当てが減少し、 結果としてオブジェクトコードが大幅に小さくなりました。 さらに、多くのスレッドコンテキストチェックは保留されていたので、 必要になったときにだけ行うようになりました(ただしこれはデバッグビルドでない 場合にのみ可能です)。

連続している netstate op コードの組は最適化で削除されます

Previously, in code such as

以前は、以下のようなコードは

    use constant DEBUG => 0;

    sub GAK {
        warn if DEBUG;
        print "stuff\n";
    }

the ops for warn if DEBUG would be folded to a null op (ex-const), but the nextstate op would remain, resulting in a runtime op dispatch of nextstate, nextstate, etc.

warn if DEBUG のための op は null op (ex-const) に畳み込まれますが、 nextstate op はそのまま残るので、実行時に nextstate, nextstate といった op が発行されていました。

The execution of a sequence of nextstate ops is indistinguishable from just the last nextstate op so the peephole optimizer now eliminates the first of a pair of nextstate ops except when the first carries a label, since labels must not be eliminated by the optimizer, and label usage isn't conclusively known at compile time.

連続した nextstate op の実行は単なる最後の nextstate op の実行と 同じなので、覗き穴最適器は最初の nextstate op の組を 削除するようになりました; 先頭がラベルの場合は例外です; なぜならラベルは 最適化器によって削除されてはならず、ラベルの利用法はコンパイル時には決定的には 分かっていないからです。

モジュールとプラグマ

新しいモジュールとプラグマ

  • CPAN::Meta::YAML 0.003 has been added as a dual-life module. It supports a subset of YAML sufficient for reading and writing META.yml and MYMETA.yml files included with CPAN distributions or generated by the module installation toolchain. It should not be used for any other general YAML parsing or generation task.

    CPAN::Meta::YAML 0.003 が二重管理モジュールとして追加されました。 これは CPAN 配布に含まれていたり、モジュールインストールツールチェーンによって 生成される META.ymlMYMETA.yml のファイルを読み書きするのに 十分な、YAML のサブセットに対応しています。 その他の一般的な YAML のパースや生成のために使うべきではありません。

  • CPAN::Meta version 2.110440 has been added as a dual-life module. It provides a standard library to read, interpret and write CPAN distribution metadata files (like META.json and META.yml) that describe a distribution, its contents, and the requirements for building it and installing it. The latest CPAN distribution metadata specification is included as CPAN::Meta::Spec and notes on changes in the specification over time are given in CPAN::Meta::History.

    CPAN::Meta バージョン 2.110440 が二重管理モジュールとして追加されました。 これは、配布、内容、ビルドとインストールに必要なものを記述した (META.jsonMETA.yml のような) CPAN 配布メタデータファイルを 読み込み、解釈、書き込みするための標準ライブラリを提供します。 最新の CPAN 配布メタデータ仕様は CPAN::Meta::Spec に含まれていて、 仕様の変更履歴は CPAN::Meta::History に記録されています。

  • HTTP::Tiny 0.012 has been added as a dual-life module. It is a very small, simple HTTP/1.1 client designed for simple GET requests and file mirroring. It has been added so that CPAN.pm and CPANPLUS can "bootstrap" HTTP access to CPAN using pure Perl without relying on external binaries like curl(1) or wget(1).

    HTTP::Tiny 0.012 が二重管理モジュールとして追加されました。 これは、単純な GET リクエストとファイルミラーのために設計された とても小さく単純な HTTP/1.1 クライアントです。 これは、CPAN.pmCPANPLUScurl(1)wget(1) といった 外部バイナリに頼ることなくピュア Perl を使って CPAN への 「ブートストラップ」HTTP アクセスを可能にするために追加されました。

  • JSON::PP 2.27105 has been added as a dual-life module to allow CPAN clients to read META.json files in CPAN distributions.

    CPAN クライアントが CPAN 配布の META.json を読み込めるように、 JSON::PP 2.27105 が二重管理モジュールとして追加されました。

  • Module::Metadata 1.000004 has been added as a dual-life module. It gathers package and POD information from Perl module files. It is a standalone module based on Module::Build::ModuleInfo for use by other module installation toolchain components. Module::Build::ModuleInfo has been deprecated in favor of this module instead.

    Module::Metadata 1.000004 が二重管理モジュールとして追加されました。 これは Perl のモジュールファイルからパッケージと POD の情報を集めます。 これは他のモジュールのインストールツールチェーンの要素として使うための、 Module::Build::ModuleInfo を基にした単独のモジュールです。 Module::Build::ModuleInfo は非推奨となり、代わりにこのモジュールを 使うべきです。

  • Perl::OSType 1.002 has been added as a dual-life module. It maps Perl operating system names (like "dragonfly" or "MSWin32") to more generic types with standardized names (like "Unix" or "Windows"). It has been refactored out of Module::Build and ExtUtils::CBuilder and consolidates such mappings into a single location for easier maintenance.

    Perl::OSType 1.002 が二重管理モジュールとして追加されました。 これは ("dragonfly" や "MSWin32" のような) Perl の オペレーティングシステム名を、("Unix" や "Windows" のような)より一般的で 標準化された名前にマッピングします。 これは Module::BuildExtUtils::CBuilder からリファクタリングされ、 このようなマッピングをより簡単に保守するために一つの場所に集約されました。

  • The following modules were added by the Unicode::Collate upgrade. See below for details.

    Unicode::Collate のアップグレードによって以下のモジュールが 追加されました。 詳しくは以下を参照してください。

    Unicode::Collate::CJK::Big5

    Unicode::Collate::CJK::GB2312

    Unicode::Collate::CJK::JISX0208

    Unicode::Collate::CJK::Korean

    Unicode::Collate::CJK::Pinyin

    Unicode::Collate::CJK::Stroke

  • Version::Requirements version 0.101020 has been added as a dual-life module. It provides a standard library to model and manipulates module prerequisites and version constraints defined in CPAN::Meta::Spec.

    Version::Requirements バージョン 0.101020 が二重管理モジュールとして 追加されました。 CPAN::Meta::Spec に定義されている前提条件とバージョン定数のモデルと 操作を標準ライブラリに提供します。

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

  • attributes has been upgraded from version 0.12 to 0.14.

    attributes はバージョン 0.12 から 0.14 に更新されました。

  • Archive::Extract has been upgraded from version 0.38 to 0.48.

    Archive::Extract はバージョン 0.38 から 0.48 に更新されました。

    Updates since 0.38 include: a safe print method that guards Archive::Extract from changes to $\; a fix to the tests when run in core Perl; support for TZ files; a modification for the lzma logic to favour IO::Uncompress::Unlzma; and a fix for an issue with NetBSD-current and its new unzip(1) executable.

    0.38 から更新されたものは: Archive::Extract$\ の変更から守る、 安全な表示メソッド; コア Perl で実行されたときのテストの修正; TZ ファイル対応; lzma のロジックに IO::Uncompress::Unlzma を使う修正; NetBSD-current と新しい unzip(1) 実行ファイルに関する問題の修正。

  • Archive::Tar has been upgraded from version 1.54 to 1.76.

    Archive::Tar はバージョン 1.54 から 1.76 に更新されました。

    Important changes since 1.54 include the following:

    1.54 からの重要な変更は以下の通りです:

    • Compatibility with busybox implementations of tar(1).

      tar(1) busybox 実装との互換性。

    • A fix so that write() and create_archive() close only filehandles they themselves opened.

      write() と create_archive() が自分自身で開いたファイルハンドルしか 閉じない問題の修正。

    • A bug was fixed regarding the exit code of extract_archive.

      extract_archive の終了コードに関するバグが修正されました。

    • The ptar(1) utility has a new option to allow safe creation of tarballs without world-writable files on Windows, allowing those archives to be uploaded to CPAN.

      ptar(1) ユーティリティは、Windows で誰でも書き込み可能な ファイルなしに安全に tarball を作成できるようになり、これらの アーカイブを CPAN にアップロード出来るようになりました。

    • A new ptargrep(1) utility for using regular expressions against the contents of files in a tar archive.

      tar アーカイブ内のファイルの内容に対して正規表現を使う、新しい ptargrep(1) ユーティリティ。

    • pax extended headers are now skipped.

      Pax 拡張ヘッダが読み飛ばされるようになりました。

  • Attribute::Handlers has been upgraded from version 0.87 to 0.89.

    Attribute::Handlers はバージョン 0.87 から 0.89 に更新されました。

  • autodie has been upgraded from version 2.06_01 to 2.1001.

    autodie はバージョン 2.06_01 から 2.1001 に更新されました。

  • AutoLoader has been upgraded from version 5.70 to 5.71.

    AutoLoader はバージョン 5.70 から 5.71 に更新されました。

  • The B module has been upgraded from version 1.23 to 1.29.

    B はバージョン 1.23 から 1.29 に更新されました。

    It no longer crashes when taking apart a y/// containing characters outside the octet range or compiled in a use utf8 scope.

    8 進数の範囲外の文字を含んでいるときや、use utf8 スコープで コンパイルされた y/// で分解したときにクラッシュしなくなりました。

    The size of the shared object has been reduced by about 40%, with no reduction in functionality.

    共有オブジェクトのサイズは、機能を減らすことなしにおよそ 40% 減少しました。

  • B::Concise has been upgraded from version 0.78 to 0.83.

    B::Concise はバージョン 0.78 から 0.83 に更新されました。

    B::Concise marks rv2sv(), rv2av(), and rv2hv() ops with the new OPpDEREF flag as "DREFed".

    B::Concise は rv2sv(), rv2av(), rv2hv() op に対して新しいフラグ OPpDEREF フラグを "DREFed" に設定します。

    It no longer produces mangled output with the -tree option [perl #80632].

    -tree オプションで壊れた出力を出さなくなりました [perl #80632]。

  • B::Debug has been upgraded from version 1.12 to 1.16.

    B::Debug はバージョン 1.12 から 1.16 に更新されました。

  • B::Deparse has been upgraded from version 0.96 to 1.03.

    B::Deparse はバージョン 0.96 から 1.03 に更新されました。

    The deparsing of a nextstate op has changed when it has both a change of package relative to the previous nextstate, or a change of %^H or other state and a label. The label was previously emitted first, but is now emitted last (5.12.1).

    nextstate op の逆パースは、以前の nextstate へのパッケージ相対への 変更か、%^H あるいはその他の状態とラベルの変更で、変更されました。 以前はラベルは最初に出力されていましたが、最後に出力されるように なりました (5.12.1)。

    The no 5.13.2 or similar form is now correctly handled by B::Deparse (5.12.3).

    no 5.13.2 や同様の形式が B::Deparse で正しく 扱えるようになりました (5.12.3)。

    B::Deparse now properly handles the code that applies a conditional pattern match against implicit $_ as it was fixed in [perl #20444].

    B::Deparse は暗黙の $_ に対して条件付きパターンマッチングを適用する コードを正しく扱えるようになりました; [perl #20444] で修正されました。

    Deparsing of our followed by a variable with funny characters (as permitted under the use utf8 pragma) has also been fixed [perl #33752].

    our の後に (use utf8 プラグマの元で許されるような)変わった文字の 変数が続いたときの逆パースも修正されました [perl #33752]。

  • B::Lint has been upgraded from version 1.11_01 to 1.13.

    B::Lint はバージョン 1.11_01 から 1.13 に更新されました。

  • base has been upgraded from version 2.15 to 2.16.

    base はバージョン 2.15 から 2.16 に更新されました。

  • Benchmark has been upgraded from version 1.11 to 1.12.

    Benchmark はバージョン 1.11 から 1.12 に更新されました。

  • bignum has been upgraded from version 0.23 to 0.27.

    bignum はバージョン 0.23 から 0.27 に更新されました。

  • Carp has been upgraded from version 1.15 to 1.20.

    Carp はバージョン 1.15 から 1.20 に更新されました。

    Carp now detects incomplete caller() overrides and avoids using bogus @DB::args. To provide backtraces, Carp relies on particular behaviour of the caller() builtin. Carp now detects if other code has overridden this with an incomplete implementation, and modifies its backtrace accordingly. Previously incomplete overrides would cause incorrect values in backtraces (best case), or obscure fatal errors (worst case).

    Carp は、不完全な caller() のオーバーライドを 検出して、偽の @DB::args の使用を回避するようになりました。 バックトレースを提供するために、Carp は caller() 組み込み関数の 特定の振る舞いに依存しています。 Carp は、この関数が不完全な実装のコードでオーバーライドされていることを 検出して、そのバックトレースをそれに応じて修正します。 以前は、不完全なオーバーライドによってバックトレースの値が間違ったり(最良の 場合)、不明瞭な致命的エラーが発生したり(最悪の場合)していました。

    This fixes certain cases of "Bizarre copy of ARRAY" caused by modules overriding caller() incorrectly (5.12.2).

    これは、caller() を正しくオーバーライドしていないモジュールによって 引き起こされる "Bizarre copy of ARRAY" が起きる場合を 修正します (5.12.2)。

    It now also avoids using regular expressions that cause Perl to load its Unicode tables, so as to avoid the "BEGIN not safe after errors" error that ensue if there has been a syntax error [perl #82854].

    これは Perl による Unicode テーブルの読み込みを引き起こし、 文法エラーがあったときに "BEGIN not safe after errors" が起こることを引き起こす正規表現の使用を回避します [perl #82854]。

  • CGI has been upgraded from version 3.48 to 3.52.

    CGI はバージョン 3.48 から 3.52 に更新されました。

    This provides the following security fixes: the MIME boundary in multipart_init() is now random and the handling of newlines embedded in header values has been improved.

    これは以下のセキュリティ修正を提供します: multipart_init() の MIME 境界が ランダムになり、ヘッダ値に含まれている改行の扱いが改良されました。

  • Compress::Raw::Bzip2 has been upgraded from version 2.024 to 2.033.

    Compress::Raw::Bzip2 はバージョン 2.024 から 2.033 に更新されました。

    It has been updated to use bzip2(1) 1.0.6.

    bzip2(1) 1.0.6 を使うように更新されました。

  • Compress::Raw::Zlib has been upgraded from version 2.024 to 2.033.

    Compress::Raw::Zlib はバージョン 2.024 から 2.033 に更新されました。

  • constant has been upgraded from version 1.20 to 1.21.

    constant はバージョン 1.20 から 1.21 に更新されました。

    Unicode constants work once more. They have been broken since Perl 5.10.0 [CPAN RT #67525].

    再び Unicode 定数が動作するようになりました。 これは Perl 5.10.0 から壊れていました [CPAN RT #67525]。

  • CPAN has been upgraded from version 1.94_56 to 1.9600.

    CPAN はバージョン 1.94_56 から 1.9600 に更新されました。

    Major highlights:

    主な注目点は:

    • much less configuration dialog hassle

      (面倒な設定ダイアログが大幅に減少)

    • support for META/MYMETA.json

      (META/MYMETA.json 対応)

    • support for local::lib

      (local::lib 対応)

    • support for HTTP::Tiny to reduce the dependency on FTP sites

      (FTP サイトへの依存性を現状させるための HTTP::Tiny 対応)

    • automatic mirror selection

      (自動ミラー選択)

    • iron out all known bugs in configure_requires

      (configure_require にある知られている全てのバグの解決)

    • support for distributions compressed with bzip2(1)

      (bzip2(1) によって圧縮した配布対応)

    • allow Foo/Bar.pm on the command line to mean Foo::Bar

      (コマンドラインでの Foo/Bar.pmFoo::Bar を意味するように)

  • CPANPLUS has been upgraded from version 0.90 to 0.9103.

    CPANPLUS はバージョン 0.90 から 0.9103 に更新されました。

    A change to cpanp-run-perl resolves RT #55964 and RT #57106, both of which related to failures to install distributions that use Module::Install::DSL (5.12.2).

    cpanp-run-perl の変更により、 [perl #55964][perl #57106] が 解決します; どちらも Module::Install::DSL を使ったインストールの 失敗に関係しています (5.12.2)。

    A dependency on Config was not recognised as a core module dependency. This has been fixed.

    Config の依存性はコアモジュールの依存性として認識されていませんでした。 これは修正されました。

    CPANPLUS now includes support for META.json and MYMETA.json.

    CPANPLUSMETA.jsonMYMETA.json に対応するようになりました。

  • CPANPLUS::Dist::Build has been upgraded from version 0.46 to 0.54.

    CPANPLUS::Dist::Build はバージョン 0.46 から 0.54 に更新されました。

  • Data::Dumper has been upgraded from version 2.125 to 2.130_02.

    Data::Dumper はバージョン 2.125 から 2.130_02 に更新されました。

    The indentation used to be off when $Data::Dumper::Terse was set. This has been fixed [perl #73604].

    $Data::Dumper::Terse がセットされているときにインデントが なくなっていました。 これは修正されました [perl #73604]。

    This upgrade also fixes a crash when using custom sort functions that might cause the stack to change [perl #74170].

    この更新は、スタックが変わるようなカスタムソート関数を使ったときの クラッシュも修正しました [perl #74170]。

    Dumpxs no longer crashes with globs returned by *$io_ref [perl #72332].

    Dumpxs*$io_ref で返されたグロブでクラッシュしなくなりました [perl #72332]。

  • DB_File has been upgraded from version 1.820 to 1.821.

    DB_File はバージョン 1.820 から 1.821 に更新されました。

  • DBM_Filter has been upgraded from version 0.03 to 0.04.

    DBM_Filter はバージョン 0.03 から 0.04 に更新されました。

  • Devel::DProf has been upgraded from version 20080331.00 to 20110228.00.

    Devel::DProf はバージョン 20080331.00 から 20110228.00 に更新されました。

    Merely loading Devel::DProf now no longer triggers profiling to start. Both use Devel::DProf and perl -d:DProf ... behave as before and start the profiler.

    単に Devel::DProf を読み込んでも、もはやプロファイリング開始を 引き起こさなくなりました。 use Devel::DProfperl -d:DProf ... は今まで通り振る舞い、 プロファイラを開始します。

    NOTE: Devel::DProf is deprecated and will be removed from a future version of Perl. We strongly recommend that you install and use Devel::NYTProf instead, as it offers significantly improved profiling and reporting.

    注意: Devel::DProf は非推奨で、将来のバージョンの Perl で 削除されます。 代わりに Devel::NYTProf をインストールして使うことを強く勧めます; これは著しく改良されたプロファイリングと報告を提供します。

  • Devel::Peek has been upgraded from version 1.04 to 1.07.

    Devel::Peek はバージョン 1.04 から 1.07 に更新されました。

  • Devel::SelfStubber has been upgraded from version 1.03 to 1.05.

    Devel::SelfStubber はバージョン 1.03 から 1.05 に更新されました。

  • diagnostics has been upgraded from version 1.19 to 1.22.

    diagnostics はバージョン 1.19 から 1.22 に更新されました。

    It now renders pod links slightly better, and has been taught to find descriptions for messages that share their descriptions with other messages.

    POD リンクを少しよくレンダリングするようになり、他のメッセージと説明を 共有している説明を知らせるようになりました。

  • Digest::MD5 has been upgraded from version 2.39 to 2.51.

    Digest::MD5 はバージョン 2.39 から 2.51 に更新されました。

    It is now safe to use this module in combination with threads.

    このモジュールをスレッドとともに使っても安全になりました。

  • Digest::SHA has been upgraded from version 5.47 to 5.61.

    Digest::SHA はバージョン 5.47 から 5.61 に更新されました。

    shasum now more closely mimics sha1sum(1)/md5sum(1).

    shasum はさらに sha1sum/md5sum を真似るようになりました。

    Addfile accepts all POSIX filenames.

    Addfile は全ての POSIX ファイル名を受け付けます。

    New SHA-512/224 and SHA-512/256 transforms (ref. NIST Draft FIPS 180-4 [February 2011])

    新しい SHA-512/224 と SHA-512/256 の変換 (参照: NIST Draft FIPS 180-4 [February 2011])

  • DirHandle has been upgraded from version 1.03 to 1.04.

    DirHandle はバージョン 1.03 から 1.04 に更新されました。

  • Dumpvalue has been upgraded from version 1.13 to 1.16.

    Dumpvalue はバージョン 1.13 から 1.16 に更新されました。

  • DynaLoader has been upgraded from version 1.10 to 1.13.

    DynaLoader はバージョン 1.10 から 1.13 に更新されました。

    It fixes a buffer overflow when passed a very long file name.

    とても長いファイル名を渡したときのバッファオーバーフローを修正しました。

    It no longer inherits from AutoLoader; hence it no longer produces weird error messages for unsuccessful method calls on classes that inherit from DynaLoader [perl #84358].

    AutoLoader から継承しなくなりました; これにより、DynaLoader から 継承するクラスのメソッド呼び出しに失敗したという奇妙なエラーメッセージは もはや出力されなくなりました [perl #84358]。

  • Encode has been upgraded from version 2.39 to 2.42.

    Encode はバージョン 2.39 から 2.42 に更新されました。

    Now, all 66 Unicode non-characters are treated the same way U+FFFF has always been treated: in cases when it was disallowed, all 66 are disallowed, and in cases where it warned, all 66 warn.

    66 Unicode 非文字全ては U+FFFF と同じように扱われるようになりました: U+FFFF が不許可の場合は 66 全てが不許可となり、U+FFFF が警告を出す場合は 66 全てで警告を出します。

  • Env has been upgraded from version 1.01 to 1.02.

    Env はバージョン 1.01 から 1.02 に更新されました。

  • Errno has been upgraded from version 1.11 to 1.13.

    Errno はバージョン 1.11 から 1.13 に更新されました。

    The implementation of Errno has been refactored to use about 55% less memory.

    Errno の実装がリファクタリングされ、メモリ消費が 55% 減りました。

    On some platforms with unusual header files, like Win32 gcc(1) using mingw64 headers, some constants that weren't actually error numbers have been exposed by Errno. This has been fixed [perl #77416].

    mingw64 を使う Win32 gcc(1) のように、変わったヘッダファイルを 使うプラットフォームで、実際にはエラー番号ではない定数がErrno によって 露出していました。 これは修正されました [perl #77416]。

  • Exporter has been upgraded from version 5.64_01 to 5.64_03.

    Exporter はバージョン 5.64_01 から 5.64_03 に更新されました。

    Exporter no longer overrides $SIG{__WARN__} [perl #74472]

    Exporter はもはや $SIG{__WARN__} をオーバーロードしなくなりました [perl #74472]

  • ExtUtils::CBuilder has been upgraded from version 0.27 to 0.280203.

    ExtUtils::CBuilder はバージョン 0.27 から 0.280203 に更新されました。

  • ExtUtils::Command has been upgraded from version 1.16 to 1.17.

    ExtUtils::Command はバージョン 1.16 から 1.17 に更新されました。

  • ExtUtils::Constant has been upgraded from 0.22 to 0.23.

    ExtUtils::Constant はバージョン 0.22 から 0.23 に更新されました。

    The AUTOLOAD helper code generated by ExtUtils::Constant::ProxySubs can now croak() for missing constants, or generate a complete AUTOLOAD subroutine in XS, allowing simplification of many modules that use it (Fcntl, File::Glob, GDBM_File, I18N::Langinfo, POSIX, Socket).

    ExtUtils::Constant::ProxySubs で生成された AUTOLOAD ヘルパーコードは、 定数が足りないときに croak() したり、XS の完全な AUTOLOAD を 生成したりするようになり、これを使っている多くのモジュール (Fcntl, File::Glob, GDBM_File, I18N::Langinfo, POSIX, Socket) を単純化できるようになりました。

    ExtUtils::Constant::ProxySubs can now optionally push the names of all constants onto the package's @EXPORT_OK.

    ExtUtils::Constant::ProxySubs はオプションとして全ての定数の名前を パッケージの @EXPORT_OK に push できるようになりました。

  • ExtUtils::Install has been upgraded from version 1.55 to 1.56.

    ExtUtils::Install はバージョン 1.55 から 1.56 に更新されました。

  • ExtUtils::MakeMaker has been upgraded from version 6.56 to 6.57_05.

    ExtUtils::MakeMaker はバージョン 6.56 から 6.57_05 に更新されました。

  • ExtUtils::Manifest has been upgraded from version 1.57 to 1.58.

    ExtUtils::Manifest はバージョン 1.57 から 1.58 に更新されました。

  • ExtUtils::ParseXS has been upgraded from version 2.21 to 2.2210.

    ExtUtils::ParseXS はバージョン 2.21 から 2.2210 に更新されました。

  • Fcntl has been upgraded from version 1.06 to 1.11.

    Fcntl はバージョン 1.06 から 1.11 に更新されました。

  • File::Basename has been upgraded from version 2.78 to 2.82.

    File::Basename はバージョン 2.78 から 2.82 に更新されました。

  • File::CheckTree has been upgraded from version 4.4 to 4.41.

    File::CheckTree はバージョン 4.4 から 4.41 に更新されました。

  • File::Copy has been upgraded from version 2.17 to 2.21.

    File::Copy はバージョン 2.17 から 2.21 に更新されました。

  • File::DosGlob has been upgraded from version 1.01 to 1.04.

    File::DosGlob はバージョン 1.01 から 1.04 に更新されました。

    It allows patterns containing literal parentheses: they no longer need to be escaped. On Windows, it no longer adds an extra ./ to file names returned when the pattern is a relative glob with a drive specification, like C:*.pl [perl #71712].

    これにより、リテラルなかっこを含むパターンを指定できるようになりました: もはやエスケープする必要はありません。 Windows では、パターンがドライブ指定付きの相対グロブのとき、もはや 返されたファイル名に追加の ./ が付かなくなりました [perl #71712]。

  • File::Fetch has been upgraded from version 0.24 to 0.32.

    File::Fetch はバージョン 0.24 から 0.32 に更新されました。

    HTTP::Lite is now supported for the "http" scheme.

    HTTP::Lite は 'http' スキームに対応しました。

    The fetch(1) utility is supported on FreeBSD, NetBSD, and Dragonfly BSD for the http and ftp schemes.

    fetch(1) ユーティリティは、httpftp のスキームに対して FreeBSD, NetBSD, Dragonfly BSD に対応しました。

  • File::Find has been upgraded from version 1.15 to 1.19.

    File::Find はバージョン 1.15 から 1.19 に更新されました。

    It improves handling of backslashes on Windows, so that paths like C:\dir\/file are no longer generated [perl #71710].

    Windows でのバックスラッシュの扱いが改良され、C:\dir\/file のような パスはもはや生成されなくなりました [perl #71710]。

  • File::Glob has been upgraded from version 1.07 to 1.12.

    File::Glob はバージョン 1.07 から 1.12 に更新されました。

  • File::Spec has been upgraded from version 3.31 to 3.33.

    File::Spec はバージョン 3.31 から 3.33 に更新されました。

    Several portability fixes were made in File::Spec::VMS: a colon is now recognized as a delimiter in native filespecs; caret-escaped delimiters are recognized for better handling of extended filespecs; catpath() returns an empty directory rather than the current directory if the input directory name is empty; and abs2rel() properly handles Unix-style input (5.12.2).

    File::Spec::VMS で、いくつかの移植性に関する修正が行われました: コロンはネイティブ filespecs でデリミタとして認識されるようになりました; キャレットでエスケープされたデリミタは拡張 filespecs でのよりよい 扱いのために認識されるようになりました。 catpath() は、入力ディレクトリ名が空の場合は現在のディレクトリではなく 空ディレクトリを返します; abs2rel() は Unix 型の入力を正しく扱います (5.12.2)。

  • File::stat has been upgraded from 1.02 to 1.05.

    File::stat はバージョン 1.02 から 1.05 に更新されました。

    The -x and -X file test operators now work correctly when run by the superuser.

    -x-X のファイルテスト演算子はスーパーユーザーによって 実行されたときに正しく動作するようになりました。

  • Filter::Simple has been upgraded from version 0.84 to 0.86.

    Filter::Simple はバージョン 0.84 から 0.86 に更新されました。

  • GDBM_File has been upgraded from 1.10 to 1.14.

    GDBM_File はバージョン 1.10 から 1.14 に更新されました。

    This fixes a memory leak when DBM filters are used.

    これは DBM フィルタが使われたときのメモリリークを修正します。

  • Hash::Util has been upgraded from 0.07 to 0.11.

    Hash::Util はバージョン 0.07 から 0.11 に更新されました。

    Hash::Util no longer emits spurious "uninitialized" warnings when recursively locking hashes that have undefined values [perl #74280].

    Hash::Util は、未定義値があるハッシュを再帰的にロックしたときにも 偽の "uninitialized" 警告が出なくなりました [perl #74280]。

  • Hash::Util::FieldHash has been upgraded from version 1.04 to 1.09.

    Hash::Util::FieldHash はバージョン 1.04 から 1.09 に更新されました。

  • I18N::Collate has been upgraded from version 1.01 to 1.02.

    I18N::Collate はバージョン 1.01 から 1.02 に更新されました。

  • I18N::Langinfo has been upgraded from version 0.03 to 0.08.

    I18N::Langinfo はバージョン 0.03 から 0.08 に更新されました。

    langinfo() now defaults to using $_ if there is no argument given, just as the documentation has always claimed.

    langinfo() は、既に文書に書かれている通りに、引数がなかった場合は デフォルトとして $_ を使うようになりました。

  • I18N::LangTags has been upgraded from version 0.35 to 0.35_01.

    I18N::LangTags はバージョン 0.35 から 0.35_01 に更新されました。

  • if has been upgraded from version 0.05 to 0.0601.

    if はバージョン 0.05 から 0.0601 に更新されました。

  • IO has been upgraded from version 1.25_02 to 1.25_04.

    IO はバージョン 1.25_02 から 1.25_04 に更新されました。

    This version of IO includes a new IO::Select, which now allows IO::Handle objects (and objects in derived classes) to be removed from an IO::Select set even if the underlying file descriptor is closed or invalid.

    このバージョンの IO には新しい IO::Select が含まれていて、 IO::Handle オブジェクト (および派生クラスのオブジェクト) を、 たとえ基とのあるファイル記述子が閉じていたり不正であったりしていても、 IO::Select 集合から削除できるようになります。

  • IPC::Cmd has been upgraded from version 0.54 to 0.70.

    IPC::Cmd はバージョン 0.54 から 0.70 に更新されました。

    Resolves an issue with splitting Win32 command lines. An argument consisting of the single character "0" used to be omitted (CPAN RT #62961).

    Win32 コマンドラインの分割での問題が解決しました。 単一の文字 "0" からなる引数が省かれていました (CPAN RT #62961)。

  • IPC::Open3 has been upgraded from 1.05 to 1.09.

    IPC::Open3 はバージョン 1.05 から 1.09 に更新されました。

    open3() now produces an error if the exec call fails, allowing this condition to be distinguished from a child process that exited with a non-zero status [perl #72016].

    open3() は、exec 呼び出しが失敗するとエラーとなるようになり、子プロセスが 非 0 のステータスで終了した場合と区別できるようになりました [perl #72016]。

    The internal xclose() routine now knows how to handle file descriptors as documented, so duplicating STDIN in a child process using its file descriptor now works [perl #76474].

    内部の xclose() ルーチンは文書通りにファイルハンドルを扱う方法を 知るようになり、STDIN を使う子プロセスで複製しても 動作するようになりました [perl #76474]。

  • IPC::SysV has been upgraded from version 2.01 to 2.03.

    IPC::SysV はバージョン 2.01 から 2.03 に更新されました。

  • lib has been upgraded from version 0.62 to 0.63.

    lib はバージョン 0.62 から 0.63 に更新されました。

  • Locale::Maketext has been upgraded from version 1.14 to 1.19.

    Locale::Maketext はバージョン 1.14 から 1.19 に更新されました。

    Locale::Maketext now supports external caches.

    Locale::Maketext は外部キャッシュに対応しました。

    This upgrade also fixes an infinite loop in Locale::Maketext::Guts::_compile() when working with tainted values (CPAN RT #40727).

    この更新により、汚染された値の場合に Locale::Maketext::Guts::_compile() が無限ループになる問題も 修正されました (CPAN RT #40727)。

    ->maketext calls now back up and restore $@ so error messages are not suppressed (CPAN RT #34182).

    ->maketext 呼び出しが $@ をバックアップおよび復元するように なったので、エラーメッセージが削除されなくなりました (CPAN RT #34182)。

  • Log::Message has been upgraded from version 0.02 to 0.04.

    Log::Message はバージョン 0.02 から 0.04 に更新されました。

  • Log::Message::Simple has been upgraded from version 0.06 to 0.08.

    Log::Message::Simple はバージョン 0.06 から 0.08 に更新されました。

  • Math::BigInt has been upgraded from version 1.89_01 to 1.994.

    Math::BigInt はバージョン 1.89_01 から 1.994 に更新されました。

    This fixes, among other things, incorrect results when computing binomial coefficients [perl #77640].

    これは、その他のものと共に、2 項係数を計算するときの間違った結果が 修正されました [perl #77640]。

    It also prevents sqrt($int) from crashing under use bigrat. [perl #73534].

    これはまた、use bigrat; での sqrt($int) で クラッシュしなくなりました [perl #73534]。

  • Math::BigInt::FastCalc has been upgraded from version 0.19 to 0.28.

    Math::BigInt::FastCalc はバージョン 0.19 から 0.28 に更新されました。

  • Math::BigRat has been upgraded from version 0.24 to 0.26_02.

    Math::BigRat はバージョン 0.24 から 0.26_02 に更新されました。

  • Memoize has been upgraded from version 1.01_03 to 1.02.

    Memoize はバージョン 1.01_03 から 1.02 に更新されました。

  • MIME::Base64 has been upgraded from 3.08 to 3.13.

    MIME::Base64 はバージョン 3.08 から 3.13 に更新されました。

    Includes new functions to calculate the length of encoded and decoded base64 strings.

    エンコード/デコードされた base64 文字列の長さを計算する新しい 関数が含まれています。

    Now provides encode_base64url() and decode_base64url() functions to process the base64 scheme for "URL applications".

    「URL アプリケーション」のための base64 スキームを処理するための、 encode_base64url() 関数と decode_base64url() 関数が提供されます。

  • Module::Build has been upgraded from version 0.3603 to 0.3800.

    Module::Build はバージョン 0.3603 から 0.3800 に更新されました。

    A notable change is the deprecation of several modules. Module::Build::Version has been deprecated and Module::Build now relies on the version pragma directly. Module::Build::ModuleInfo has been deprecated in favor of a standalone copy called Module::Metadata. Module::Build::YAML has been deprecated in favor of CPAN::Meta::YAML.

    注目すべき変更は、いくつかのモジュールの非推奨化です。 Module::Build::Version は非推奨となり、 Module::Buildversion プラグマに直接依存するようになりました。 Module::Build::ModuleInfo は非推奨となり、Module::Metadata と呼ばれる スタンドアロンのコピーを選びました。 Module::Build::YAML は非推奨となり、CPAN::Meta::YAML を選びました。

    Module::Build now also generates META.json and MYMETA.json files in accordance with version 2 of the CPAN distribution metadata specification, CPAN::Meta::Spec. The older format META.yml and MYMETA.yml files are still generated.

    Module::Build は、CPAN 配布メタデータ仕様 CPAN::Meta::Spec の バージョン 2 に従った META.jsonMYMETA.json も 生成するようになりました。 古い形式の META.ymlMYMETA.yml ファイルはまだ生成されます。

  • Module::CoreList has been upgraded from version 2.29 to 2.47.

    Module::CoreList はバージョン 2.29 から 2.47 に更新されました。

    Besides listing the updated core modules of this release, it also stops listing the Filespec module. That module never existed in core. The scripts generating Module::CoreList confused it with VMS::Filespec, which actually is a core module as of Perl 5.8.7.

    このリリースで更新されたモジュールの一覧の他に、 Filespec モジュールを一覧に載せるのを停止しました。 このモジュールはコアには含まれません。 Module::CoreList を生成するスクリプトが、5.8.7 からコアに入った VMS::Filespec モジュールとこれとを混乱していました。

  • Module::Load has been upgraded from version 0.16 to 0.18.

    Module::Load はバージョン 0.16 から 0.18 に更新されました。

  • Module::Load::Conditional has been upgraded from version 0.34 to 0.44.

    Module::Load::Conditional はバージョン 0.34 から 0.44 に更新されました。

  • The mro pragma has been upgraded from version 1.02 to 1.07.

    mro はバージョン 1.02 から 1.07 に更新されました。

  • NDBM_File has been upgraded from version 1.08 to 1.12.

    NDBM_File はバージョン 1.08 から 1.12 に更新されました。

    This fixes a memory leak when DBM filters are used.

    これは DBM フィルタが使われたときのメモリリークを修正します。

  • Net::Ping has been upgraded from version 2.36 to 2.38.

    Net::Ping はバージョン 2.36 から 2.38 に更新されました。

  • NEXT has been upgraded from version 0.64 to 0.65.

    NEXT はバージョン 0.64 から 0.65 に更新されました。

  • Object::Accessor has been upgraded from version 0.36 to 0.38.

    Object::Accessor はバージョン 0.36 から 0.38 に更新されました。

  • ODBM_File has been upgraded from version 1.07 to 1.10.

    ODBM_File はバージョン 1.07 から 1.10 に更新されました。

    This fixes a memory leak when DBM filters are used.

    これは DBM フィルタが使われたときのメモリリークを修正します。

  • Opcode has been upgraded from version 1.15 to 1.18.

    Opcode はバージョン 1.15 から 1.18 に更新されました。

  • The overload pragma has been upgraded from 1.10 to 1.13.

    overload はバージョン 1.10 から 1.13 に更新されました。

    overload::Method can now handle subroutines that are themselves blessed into overloaded classes [perl #71998].

    overload::Method は、自分自身オーバーロードされたクラスに bless されている サブルーチンを扱うことが出来るようになりました [perl #71998]。

    The documentation has greatly improved. See "Documentation" below.

    文書が大きく改良されました。 以下の "Documentation" を参照してください。

  • Params::Check has been upgraded from version 0.26 to 0.28.

    Params::Check はバージョン 0.26 から 0.28 に更新されました。

  • The parent pragma has been upgraded from version 0.223 to 0.225.

    parent はバージョン 0.223 から 0.225 に更新されました。

  • Parse::CPAN::Meta has been upgraded from version 1.40 to 1.4401.

    Parse::CPAN::Meta はバージョン 1.40 から 1.4401 に更新されました。

    The latest Parse::CPAN::Meta can now read YAML and JSON files using CPAN::Meta::YAML and JSON::PP, which are now part of the Perl core.

    最新の Parse::CPAN::Meta は、Perl コアの一部となった CPAN::Meta::YAMLJSON::PP を使って YAML と JSON のファイルを読み込めるようになりました。

  • PerlIO::encoding has been upgraded from version 0.12 to 0.14.

    PerlIO::encoding はバージョン 0.12 から 0.14 に更新されました。

  • PerlIO::scalar has been upgraded from 0.07 to 0.11.

    PerlIO::scalar はバージョン 0.07 から 0.11 に更新されました。

    A read() after a seek() beyond the end of the string no longer thinks it has data to read [perl #78716].

    文字列の末尾を超えた seek() の後で read() しても、もはや読み込むデータが あるとは判断しなくなりました [perl #78716]。

  • PerlIO::via has been upgraded from version 0.09 to 0.11.

    PerlIO::via はバージョン 0.09 から 0.11 に更新されました。

  • Pod::Html has been upgraded from version 1.09 to 1.11.

    Pod::Html はバージョン 1.09 から 1.11 に更新されました。

  • Pod::LaTeX has been upgraded from version 0.58 to 0.59.

    Pod::LaTeX はバージョン 0.58 から 0.59 に更新されました。

  • Pod::Perldoc has been upgraded from version 3.15_02 to 3.15_03.

    Pod::Perldoc はバージョン 3.15_02 から 3.15_03 に更新されました。

  • Pod::Simple has been upgraded from version 3.13 to 3.16.

    Pod::Simple はバージョン 3.13 から 3.16 に更新されました。

  • POSIX has been upgraded from 1.19 to 1.24.

    POSIX はバージョン 1.19 から 1.24 に更新されました。

    It now includes constants for POSIX signal constants.

    POSIX シグナル定数のための定数が追加されました。

  • The re pragma has been upgraded from version 0.11 to 0.18.

    re はバージョン 0.11 から 0.18 に更新されました。

    The use re '/flags' subpragma is new.

    use re '/flags' 副プラグマが新しいです。

    The regmust() function used to crash when called on a regular expression belonging to a pluggable engine. Now it croaks instead.

    regmust() 関数はプラグ可能なエンジン所有の正規表現を呼び出すと クラッシュしていました。 今では代わりに croak します。

    regmust() no longer leaks memory.

    regmust() はもはやメモリリークしなくなりました。

  • Safe has been upgraded from version 2.25 to 2.29.

    Safe はバージョン 2.25 から 2.29 に更新されました。

    Coderefs returned by reval() and rdo() are now wrapped via wrap_code_refs() (5.12.1).

    reval() と rdo() で返されるコードリファレンスは wrap_code_refs() で ラップされるようになりました (5.12.1)。

    This fixes a possible infinite loop when looking for coderefs.

    これにより、コードリファレンスを検索したときに無限ループになる 可能性がある問題が修正されます。

    It adds several version::vxs::* routines to the default share.

    デフォルトの共有のためにいくつかの version::vxs::* ルーチンが 追加されました。

  • SDBM_File has been upgraded from version 1.06 to 1.09.

    SDBM_File はバージョン 1.06 から 1.09 に更新されました。

  • SelfLoader has been upgraded from 1.17 to 1.18.

    SelfLoader はバージョン 1.17 から 1.18 に更新されました。

    It now works in taint mode [perl #72062].

    汚染モードでも動作するようになりました [perl #72062]。

  • The sigtrap pragma has been upgraded from version 1.04 to 1.05.

    sigtrap はバージョン 1.04 から 1.05 に更新されました。

    It no longer tries to modify read-only arguments when generating a backtrace [perl #72340].

    バックトレースを生成するときに、もはや読み込み専用引数を変更しようと しなくなりました [perl #72340]。

  • Socket has been upgraded from version 1.87 to 1.94.

    Socket はバージョン 1.87 から 1.94 に更新されました。

    上述の "Improved IPv6 support" を参照してください。

  • Storable has been upgraded from version 2.22 to 2.27.

    Storable はバージョン 2.22 から 2.27 に更新されました。

    Includes performance improvement for overloaded classes.

    オーバーロードされたクラスの性能が向上しました。

    This adds support for serialising code references that contain UTF-8 strings correctly. The Storable minor version number changed as a result, meaning that Storable users who set $Storable::accept_future_minor to a FALSE value will see errors (see "FORWARD COMPATIBILITY" in Storable for more details).

    これは UTF-8 文字列を含むコードリファレンスの正しいシリアル化対応が 追加されました。 結果として Storable のマイナーバージョン番号が変更されたので、 $Storable::accept_future_minorFALSE 値に設定している Storable ユーザーはエラーを見ることになります (さらなる詳細については "FORWARD COMPATIBILITY" in Storable を 参照してください)。

    Freezing no longer gets confused if the Perl stack gets reallocated during freezing [perl #80074].

    凍結 (freezing) 中に Perl のスタックが再配置されたとき、凍結はもはや 混乱しなくなりました [perl #80074]。

  • Sys::Hostname has been upgraded from version 1.11 to 1.16.

    Sys::Hostname はバージョン 1.11 から 1.16 に更新されました。

  • Term::ANSIColor has been upgraded from version 2.02 to 3.00.

    Term::ANSIColor はバージョン 2.02 から 3.00 に更新されました。

  • Term::UI has been upgraded from version 0.20 to 0.26.

    Term::UI はバージョン 0.20 から 0.26 に更新されました。

  • Test::Harness has been upgraded from version 3.17 to 3.23.

    Test::Harness はバージョン 3.17 から 3.23 に更新されました。

  • Test::Simple has been upgraded from version 0.94 to 0.98.

    Test::Simple はバージョン 0.94 から 0.98 に更新されました。

    Among many other things, subtests without a plan or no_plan now have an implicit done_testing() added to them.

    その他の多くのことの他に、planno_plan のない副テストには 暗黙に done_testing() が追加されるようになりました。

  • Thread::Semaphore has been upgraded from version 2.09 to 2.12.

    Thread::Semaphore はバージョン 2.09 から 2.12 に更新されました。

    It provides two new methods that give more control over the decrementing of semaphores: down_nb and down_force.

    セマフォをデクリメントすることをさらに制御する二つの新しいメソッドが 提供されます: down_nbdown_force です。

  • Thread::Queue has been upgraded from version 2.11 to 2.12.

    Thread::Queue はバージョン 2.11 から 2.12 に更新されました。

  • The threads pragma has been upgraded from version 1.75 to 1.83.

    threads はバージョン 1.75 から 1.83 に更新されました。

  • The threads::shared pragma has been upgraded from version 1.32 to 1.37.

    threads::shared はバージョン 1.32 から 1.36 に更新されました。

  • Tie::Hash has been upgraded from version 1.03 to 1.04.

    Tie::Hash はバージョン 1.03 から 1.04 に更新されました。

    Calling Tie::Hash->TIEHASH() used to loop forever. Now it croaks.

    Tie::Hash->TIEHASH() の呼び出しが無限ループしていました。 今では croak します。

  • Tie::Hash::NamedCapture has been upgraded from version 0.06 to 0.08.

    Tie::Hash::NamedCapture はバージョン 0.06 から 0.08 に更新されました。

  • Tie::RefHash has been upgraded from version 1.38 to 1.39.

    Tie::RefHash はバージョン 1.38 から 1.39 に更新されました。

  • Time::HiRes has been upgraded from version 1.9719 to 1.9721_01.

    Time::HiRes はバージョン 1.9719 から 1.9721_01 に更新されました。

  • Time::Local has been upgraded from version 1.1901_01 to 1.2000.

    Time::Local はバージョン 1.1901_01 から 1.2000 に更新されました。

  • Time::Piece has been upgraded from version 1.15_01 to 1.20_01.

    Time::Piece はバージョン 1.15_01 から 1.20_01 に更新されました。

  • Unicode::Collate has been upgraded from version 0.52_01 to 0.73.

    Unicode::Collate はバージョン 0.52_01 から 0.73 に更新されました。

    Unicode::Collate has been updated to use Unicode 6.0.0.

    Unicode::Collate は Unicode 6.0.0 を使うように更新されました。

    Unicode::Collate::Locale now supports a plethora of new locales: ar, be, bg, de__phonebook, hu, hy, kk, mk, nso, om, tn, vi, hr, ig, ja, ko, ru, sq, se, sr, to, uk, zh, zh__big5han, zh__gb2312han, zh__pinyin, and zh__stroke.

    Unicode::Collate::Locale は大量の新しいロケールに対応しました: ar, be, bg, de__phonebook, hu, hy, kk, mk, nso, om, tn, vi, hr, ig, ja, ko, ru, sq, se, sr, to, uk, zh, zh__big5han, zh__gb2312han, zh__pinyin, zh__stroke

    The following modules have been added:

    以下のモジュールが追加されました:

    Unicode::Collate::CJK::Big5 for zh__big5han which makes tailoring of CJK Unified Ideographs in the order of CLDR's big5han ordering.

    zh__big5han のための Unicode::Collate::CJK::Big5 は CJK 統合表意文字を CLDR の big5han 順序で調整します。

    Unicode::Collate::CJK::GB2312 for zh__gb2312han which makes tailoring of CJK Unified Ideographs in the order of CLDR's gb2312han ordering.

    zh__gb2312han のための Unicode::Collate::CJK::GB2312 は CJK 統合表意文字を CLDR の gb2312han 順序で調整します。

    Unicode::Collate::CJK::JISX0208 which makes tailoring of 6355 kanji (CJK Unified Ideographs) in the JIS X 0208 order.

    Unicode::Collate::CJK::JISX0208 は 6355 文字の漢字 (CJK 統合表意文字) を JIS X 0208 の順序で調整します。

    Unicode::Collate::CJK::Korean which makes tailoring of CJK Unified Ideographs in the order of CLDR's Korean ordering.

    Unicode::Collate::CJK::Korean は CJK 統合表意文字を CLDR の 韓国語順序で調整します。

    Unicode::Collate::CJK::Pinyin for zh__pinyin which makes tailoring of CJK Unified Ideographs in the order of CLDR's pinyin ordering.

    zh__pinyin のための Unicode::Collate::CJK::Pinyin は CJK 統合表意文字を CLDR のピンイン順序で調整します。

    Unicode::Collate::CJK::Stroke for zh__stroke which makes tailoring of CJK Unified Ideographs in the order of CLDR's stroke ordering.

    zh__stroke のための Unicode::Collate::CJK::Stroke は CJK 統合表意文字を CLDR の筆画順序で調整します。

    This also sees the switch from using the pure-Perl version of this module to the XS version.

    これはまた、このモジュールの ピュア Perl 版から XS 版への切り替えを 見るようになりました。

  • Unicode::Normalize has been upgraded from version 1.03 to 1.10.

    Unicode::Normalize はバージョン 1.03 から 1.10 に更新されました。

  • Unicode::UCD has been upgraded from version 0.27 to 0.32.

    Unicode::UCD はバージョン 0.27 から 0.32 に更新されました。

    A new function, Unicode::UCD::num(), has been added. This function returns the numeric value of the string passed it or undef if the string in its entirety has no "safe" numeric value. (For more detail, and for the definition of "safe", see "num" in Unicode::UCD.)

    新しい関数である Unicode::UCD::num() が追加されました。 この関数は、渡された文字列の数値としての値か、あるいは文字列が全体的に 「安全」な数値としての値がない場合は undef を返します。 (さらなる詳細と、「安全」の定義については、"num" in Unicode::UCD を 参照してください。)

    This upgrade also includes several bug fixes:

    この更新には多くのバグ修正も含まれています:

    charinfo()
    • It is now updated to Unicode Version 6.0.0 with Corrigendum #8, excepting that, just as with Perl 5.14, the code point at U+1F514 has no name.

      Unicode Version 6.0.0 の Corrigendum #8 で更新されましたが、 Perl 5.14 と同様、符号位置 U+1F514 には名前がないという例外があります。

    • Hangul syllable code points have the correct names, and their decompositions are always output without requiring Lingua::KO::Hangul::Util to be installed.

      ハングル音節符号位置に正しい名前が付き、その分解は常に Lingua::KO::Hangul::Util をインストールする必要なしに出力されます。

    • CJK (Chinese-Japanese-Korean) code points U+2A700 to U+2B734 and U+2B740 to U+2B81D are now properly handled.

      CJK (Chinese-Japanese-Korean) 符号位置 U+2A700 から U+2B734 と、 U+2B740 から U+2B81D は正しく扱えるようになりました。

    • Numeric values are now output for those CJK code points that have them.

      これらの CJK 符号位置はが持っている数値を出力するようになりました。

    • Names output for code points with multiple aliases are now the corrected ones.

      複数の別名のある符号位置の名前は正しくなりました。

    charscript()

    This now correctly returns "Unknown" instead of undef for the script of a code point that hasn't been assigned another one.

    他の値が割り当てられていない符号位置の用字では undef ではなく 正しく "Unknown" を返すようになりました。

    charblock()

    This now correctly returns "No_Block" instead of undef for the block of a code point that hasn't been assigned to another one.

    他の値が割り当てられていない符号位置のブロックでは undef ではなく 正しく "No_Block" を返すようになりました。

  • The version pragma has been upgraded from 0.82 to 0.88.

    version はバージョン 0.82 から 0.88 に更新されました。

    Because of a bug, now fixed, the is_strict() and is_lax() functions did not work when exported (5.12.1).

    バグにより、エクスポートされたときにis_strict() 関数と is_lax() 関数が 動作していませんでしたが、修正されました (5.12.1)。

  • The warnings pragma has been upgraded from version 1.09 to 1.12.

    warnings はバージョン 1.09 から 1.12 に更新されました。

    Calling use warnings without arguments is now significantly more efficient.

    引数なしの use warnings の呼び出しは、大幅に効率的になりました。

  • The warnings::register pragma has been upgraded from version 1.01 to 1.02.

    warnings::register はバージョン 1.01 から 1.02 に更新されました。

    It is now possible to register warning categories other than the names of packages using warnings::register. See perllexwarn(1) for more information.

    warnings::register を使ったパッケージ名以外の警告カテゴリを 登録できるようになりました。 さらなる情報については perllexwarn(1) を参照してください。

  • XSLoader has been upgraded from version 0.10 to 0.13.

    XSLoader はバージョン 0.10 から 0.13 に更新されました。

  • VMS::DCLsym has been upgraded from version 1.03 to 1.05.

    VMS::DCLsym はバージョン 1.03 から 1.05 に更新されました。

    Two bugs have been fixed [perl #84086]:

    二つのバグが修正されました [perl #84086]:

    The symbol table name was lost when tying a hash, due to a thinko in TIEHASH. The result was that all tied hashes interacted with the local symbol table.

    TIEHASH での思い違いによって、ハッシュを tie したときにシンボル テーブル名が失われていました。 結果として、全ての tie されたハッシュがローカルシンボルテーブルと 相互作用していました。

    Unless a symbol table name had been explicitly specified in the call to the constructor, querying the special key :LOCAL failed to identify objects connected to the local symbol table.

    コンストラクタへの呼び出しでシンボルテーブル名が明示的に指定されない限り、 特殊キー :LOCAL の検索は、ローカルシンボルテーブルに接続したオブジェクトの 識別に失敗していました。

  • The Win32 module has been upgraded from version 0.39 to 0.44.

    Win32 はバージョン 0.39 から 0.44 に更新されました。

    This release has several new functions: Win32::GetSystemMetrics(), Win32::GetProductInfo(), Win32::GetOSDisplayName().

    このリリースにはいくつかの新しい関数があります: Win32::GetSystemMetrics(), Win32::GetProductInfo(), Win32::GetOSDisplayName() です。

    The names returned by Win32::GetOSName() and Win32::GetOSDisplayName() have been corrected.

    Win32::GetOSName() と Win32::GetOSDisplayName() から返される名前が 正しくなりました。

  • XS::Typemap has been upgraded from version 0.03 to 0.05.

    XS::Typemap はバージョン 0.03 から 0.05 に更新されました。

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

As promised in Perl 5.12.0's release notes, the following modules have been removed from the core distribution, and if needed should be installed from CPAN instead.

Perl 5.12.0 のリリースノートで約束した通り、以下のモジュールがコア配布から 削除されました; もし必要なら代わりに CPAN からインストールしてください。

  • Class::ISA has been removed from the Perl core. Prior version was 0.36.

    Class::ISA は Perl コアから削除されました。 以前のバージョンは 0.36 でした。

  • Pod::Plainer has been removed from the Perl core. Prior version was 1.02.

    Pod::Plainer は Perl コアから削除されました。 以前のバージョンは 1.02 でした。

  • Switch has been removed from the Perl core. Prior version was 2.16.

    Switch は Perl コアから削除されました。 以前のバージョンは 2.16 でした。

The removal of Shell has been deferred until after 5.14, as the implementation of Shell shipped with 5.12.0 did not correctly issue the warning that it was to be removed from core.

Shell の削除は 5.14 以降まで延期されました; 5.12.0 で出荷された Shell の実装が、コアから削除される予定であるという 警告を正しく出力していなかったからです。

文書

新しい文書

perlgpl

perlgpl has been updated to contain GPL version 1, as is included in the README distributed with Perl (5.12.1).

perlgpl は Perl と配布されている README に含まれていたままの形の GPL バージョン 1 を含むように更新されました。

Perl 5.12.x delta files

The perldelta files for Perl 5.12.1 to 5.12.3 have been added from the maintenance branch: perl5121delta, perl5122delta, perl5123delta.

Perl 5.12.1 から 5.12.3の perldelta ファイルがメンテナンスブランチから 追加されました: perl5121delta, perl5122delta, perl5123delta

perlpodstyle

New style guide for POD documentation, split mostly from the NOTES section of the pod2man(1) manpage.

POD 文書のための新しいスタイルガイドで、ほとんどは pod2man(1) man ページの NOTES の節から分離されました。

perlsource, perlinterp, perlhacktut, and perlhacktips

(perlsource, perlinterp, perlhacktut, perlhacktips)

後述する "perlhack and perlrepository revamp" を参照してください。

既存の文書の変更

perlmodlib is now complete

(perlmodlib が完全になりました)

The perlmodlib manpage that came with Perl 5.12.0 was missing several modules due to a bug in the script that generates the list. This has been fixed [perl #74332] (5.12.1).

Perl 5.12.0 の perlmodlib ページは、リストを生成するスクリプトのバグにより、 多くのモジュールが漏れていました。 これは修正されました [perl #74332] (5.12.1)。

Replace incorrect tr/// table in perlebcdic

(perlebcdic の間違った tr/// の置き換え)

perlebcdic contains a helpful table to use in tr/// to convert between EBCDIC and Latin1/ASCII. The table was the inverse of the one it describes, though the code that used the table worked correctly for the specific example given.

perlebcdic には EBCDIC と Latin1/ASCII を変換するために tr/// を使うのに便利な表があります。 表は記述されているのと逆になっていましたが、表で使われているコードは 特定の例では正しく動作していました。

The table has been corrected and the sample code changed to correspond.

表は逆順に変更され、サンプルコードも対応するように変更されました。

The table has also been changed to hex from octal, and the recipes in the pod have been altered to print out leading zeros to make all values the same length.

また、表は 8 進数から 16 進数に変更され、pod にあるレシピは全ての値が 同じ長さになるように先頭にゼロが表示されるように変更されました。

ユーザー定義の大文字小文字定義に関するトリック

perlunicode now contains an explanation of how to override, mangle and otherwise tweak the way Perl handles upper-, lower- and other-case conversions on Unicode data, and how to provide scoped changes to alter one's own code's behaviour without stomping on anybody else's.

perlunicode は、Perl が Unicode データに対して大文字、小文字、それ以外 の変換をどのように行うかについてのオーバーライド、切り刻み、およびその他の 調整方法に関する説明と、 他の人のコードの振る舞いを変えることなく自分のコードの振る舞いを変えるための、 範囲的な変更を提供する方法を含むようになりました。

INSTALL で Perl が C89 コンパイラが必要であることを明示的に宣言しました

This was already true, but it's now Officially Stated For The Record (5.12.2).

これは既に真でしたが、記録として公式に表明しました (5.12.2)。

Explanation of \xHH and \oOOO escapes

(\xHH エスケープと \oOOO エスケープの説明)

perlop has been updated with more detailed explanation of these two character escapes.

perlop はこれら二つの文字エスケープに関するより詳細な説明で 更新されました。

-0NNN switch

(-0NNN オプション)

In perlrun, the behaviour of the -0NNN switch for -0400 or higher has been clarified (5.12.2).

perlrun において、-0NNN オプションのうち -0400 以上のものの 振る舞いが明確化されました (5.12.2)。

メンテナンスポリシー

perlpolicy now contains the policy on what patches are acceptable for maintenance branches (5.12.1).

perlpolicy に、メンテナンスブランチにどのようなパッチが受け入れられるかに ついてのポリシーが追加されました (5.12.1)。

非推奨ポリシー

perlpolicy now contains the policy on compatibility and deprecation along with definitions of terms like "deprecation" (5.12.2).

perlpolicy に、「非推奨」("deprecation") のような言葉の定義とともに、 互換性と非推奨に関するポリシーが追加されました (5.12.2)。

New descriptions in perldiag

(perldiag の新しい記述)

The following existing diagnostics are now documented:

以下の示す、既存の診断メッセージが文書化されました:

perlbook

perlbook has been expanded to cover many more popular books.

perlbook はより多くの有名な書籍を対象とするように拡張されました。

SvTRUE macro

(SvTRUE マクロ)

The documentation for the SvTRUE macro in perlapi was simply wrong in stating that get-magic is not processed. It has been corrected.

perlapi にある SvTRUE マクロの説明は get-magic が処理されないという 説明が単純に間違っていました。 これは修正されました。

op 操作関数

Several API functions that process optrees have been newly documented.

op 木を処理するためのいくつかの API 関数が新たに文書化されました。

perlvar revamp

(perlvar の刷新)

perlvar reorders the variables and groups them by topic. Each variable introduced after Perl 5.000 notes the first version in which it is available. perlvar also has a new section for deprecated variables to note when they were removed.

perlvar は、変数の順序を変えて、主題毎にグループ化しました。 Perl 5.000 以降に導入された変数はそれぞれ利用可能になったバージョンを 記しています。 perlvar は、非推奨の変数がいつ削除されたかを記すための新しい節が 追加されました。

スカラコンテキストでの配列とハッシュのスライス

These are now documented in perldata.

これらは perldata で文書化されました。

use locale and formats

(use locale とフォーマット)

perlform and perllocale have been corrected to state that use locale affects formats.

perlformperllocale は、use locale がフォーマットに与える 影響を述べるように修正されました。

overload

overload's documentation has practically undergone a rewrite. It is now much more straightforward and clear.

overload の文書はほとんど書き直されました。 はるかに直接的で明確になりました。

perlhack と perlrepository の刷新

The perlhack document is now much shorter, and focuses on the Perl 5 development process and submitting patches to Perl. The technical content has been moved to several new documents, perlsource, perlinterp, perlhacktut, and perlhacktips. This technical content has been only lightly edited.

perlhack 文書はとても短くなり、Perl 5 開発プロセスと Perl への パッチの投稿に焦点を当てています。 技術的な内容は新しい文書である perlsource, perlinterp, perlhacktut, perlhacktips に移動しました。 技術的な内容は軽く編集されただけです。

The perlrepository document has been renamed to perlgit. This new document is just a how-to on using git with the Perl source code. Any other content that used to be in perlrepository has been moved to perlhack.

perlrepository 文書は perlgit に名前が変わりました。 この新しい文書は単に git で Perl ソースコードを扱うための手引き書です。 perlrepository にあったその他の内容は perlhack に移動しました。

Time::Piece の例

Examples in perlfaq4 have been updated to show the use of Time::Piece.

perlfaq4 の例が Time::Piece の使い方を示すように更新されました。

診断メッセージ

The following additions or changes have been made to diagnostic output, including warnings and fatal error messages. For the complete list of diagnostic messages, see perldiag.

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

新しい診断メッセージ

新しいエラー

Closure prototype called

This error occurs when a subroutine reference passed to an attribute handler is called, if the subroutine is a closure [perl #68560].

このエラーは、属性ハンドラに渡されたサブルーチンのリファレンスが 呼び出されたとき、そのサブルーチンがクロージャだったときに起こります [perl #68560]。

Insecure user-defined property %s

Perl detected tainted data when trying to compile a regular expression that contains a call to a user-defined character property function, meaning \p{IsFoo} or \p{InFoo}. See "User-Defined Character Properties" in perlunicode and perlsec.

Perl は、ユーザー定義文字特性関数 (\p{IsFoo}\p{InFoo}) の 呼び出しを含む正規表現をコンパイルしようとしたときに汚染されているデータを 検出しました。 "User-Defined Character Properties" in perlunicodeperlsec を 参照してください。

panic: gp_free failed to free glob pointer - something is repeatedly re-creating entries

This new error is triggered if a destructor called on an object in a typeglob that is being freed creates a new typeglob entry containing an object with a destructor that creates a new entry containing an object etc.

この新しいエラーは、新しいエントリを含むオブジェクトを作る デストラクタのオブジェクトを含む新しい型グロブを作る解放された 型グロブの中のオブジェクトのデストラクタ、といったものが 呼び出されたときに起こります。

Parsing code internal error (%s)

This new fatal error is produced when parsing code supplied by an extension violates the parser's API in a detectable way.

この新しい致命的エラーは、エクステンションによって供給されたパースコードが 検知できる方法でパーサの API に違反しているときに発生します。

refcnt: fd %d%s

This new error only occurs if a internal consistency check fails when a pipe is about to be closed.

この新しいエラーは、パイプを閉じようとしているときに内部の一貫性チェックに 失敗したときにのみ発生します。

Regexp modifier "/%c" may not appear twice

The regular expression pattern has one of the mutually exclusive modifiers repeated.

正規表現パターンに、相互に排他な修飾子の一つが繰り返されています。

Regexp modifiers "/%c" and "/%c" are mutually exclusive

The regular expression pattern has more than one of the mutually exclusive modifiers.

正規表現パターンに、相互に排他な修飾子が複数あります。

Using !~ with %s doesn't make sense

This error occurs when !~ is used with s///r or y///r.

このエラーは、!~s///ry///r で使われたときに起こります。

新しい警告

"\b{" is deprecated; use "\b\{" instead
"\B{" is deprecated; use "\B\{" instead

Use of an unescaped "{" immediately following a \b or \B is now deprecated in order to reserve its use for Perl itself in a future release.

エスケープされていない "{" の直後に \b または \B を使うことは、 Perl 自身の将来のリリースでの使用を予約するために非推奨となりました。

Operation "%s" returns its argument for ...

Performing an operation requiring Unicode semantics (such as case-folding) on a Unicode surrogate or a non-Unicode character now triggers this warning.

Unicode サロゲートや非 Unicode 文字に対して (大文字小文字の畳み込みのような) Unicode の意味論 を要求する操作を実行すると、この警告が発生します。

Use of qw(...) as parentheses is deprecated

See "Use of qw(...) as parentheses", above, for details.

詳しくは、上述の "Use of qw(...) as parentheses" を参照してください。

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

  • The "Variable $foo is not imported" warning that precedes a strict 'vars' error has now been assigned the "misc" category, so that no warnings will suppress it [perl #73712].

    strict 'vars' の下での "Variable $foo is not imported" 警告は "misc" カテゴリに割り当てられたので、no warnings はこれを 抑制します [perl #73712]。

  • warn() and die() now produce "Wide character" warnings when fed a character outside the byte range if STDERR is a byte-sized handle.

    warn() と die() は、STDERR がバイト単位で扱われているときに バイトの範囲外の文字が送られると "Wide character" 警告を 出すようになりました。

  • The "Layer does not match this perl" error message has been replaced with these more helpful messages [perl #73754]:

    "Layer does not match this perl" エラーメッセージはより助けになる、 以下のメッセージに置き換えられました [perl #73754]:

    • PerlIO layer function table size (%d) does not match size expected by this perl (%d)

    • PerlIO layer instance size (%d) does not match size expected by this perl (%d)

  • The "Found = in conditional" warning that is emitted when a constant is assigned to a variable in a condition is now withheld if the constant is actually a subroutine or one generated by use constant, since the value of the constant may not be known at the time the program is written [perl #77762].

    条件文の中で定数が変数に代入されるときに出力される "Found = in conditional" 警告は、定数が実際にはサブルーチンあるいは use constant で生成されたものである場合には出力されなくなりました; なぜなら定数の値はプログラムが書かれた時点ではわからないかもしれないからです [perl #77762]。

  • Previously, if none of the gethostbyaddr(), gethostbyname() and gethostent() functions were implemented on a given platform, they would all die with the message "Unsupported socket function 'gethostent' called", with analogous messages for getnet*() and getserv*(). This has been corrected.

    以前は、もしプラットフォームに gethostbyaddr(), gethostbyname(), gethostent() 関数のどれも実装されていない場合、すべて "Unsupported socket function 'gethostent' called" というメッセージと getnet*() および getserv*() と似たメッセージで die していました。 これは修正されました。

  • The warning message about unrecognized regular expression escapes passed through has been changed to include any literal "{" following the two-character escape. For example, "\q{" is now emitted instead of "\q".

    認識できない正規表現エスケープが渡された時の警告メッセージは、 2 文字のエスケープに引き続く "{" が含まれるようになりました。 例えば、"\q" の代わりに "\q{" が出力されます。

ツールの変更

perlbug(1)

  • perlbug now looks in the EMAIL environment variable for a return address if the REPLY-TO and REPLYTO variables are empty.

    perlbug は、REPLY-TO と REPLYTO の変数が空のとき、リターンアドレスとして EMAIL 環境変数を見るようになりました。

  • perlbug did not previously generate a "From:" header, potentially resulting in dropped mail; it now includes that header.

    perlbug は以前は "From:" ヘッダを生成していなかったので、メールが 削除されてしまう可能性がありました; このヘッダが含まれるようになりました。

  • The user's address is now used as the Return-Path.

    ユーザーのアドレスは Return-Path として使われるようになりました。

    Many systems these days don't have a valid Internet domain name, and [email protected] does not accept email with a return-path that does not resolve. So the user's address is now passed to sendmail so it's less likely to get stuck in a mail queue somewhere [perl #82996].

    最近の多くのシステムは有効なインターネットドメイン名を持っておらず、 [email protected] は解決できない return-path をもつ電子メールは 受け付けません。 それで、どこかのメールキューで引っかかる可能性を減らすために、 ユーザーのアドレスが sendmail に渡されるようになりました [perl #82996]。

  • perlbug now always gives the reporter a chance to change the email address it guesses for them (5.12.2).

    perlbug は常に、推測された電子メールアドレスを変更する機会を 報告者に与えるようになりました (5.12.2)。

  • perlbug should no longer warn about uninitialized values when using the -d and -v options (5.12.2).

    perlbug は、-d-v オプションを使ったときに非初期化値に関して 警告を出さなくなりました (5.12.2)。

perl5db.pl

  • The remote terminal works after forking and spawns new sessions, one per forked process.

    新しいセッションを fork と spawn した後、fork したプロセス毎に一つ、 リモート端末が動作します。

ptargrep

  • ptargrep is a new utility to apply pattern matching to the contents of files in a tar archive. It comes with Archive::Tar.

    ptargrep(1) 、tar アーカイブ内のファイルの内容に対してパターンマッチングを 適用するための新しいユーティリティです。 これは Archive::Tar に同梱されています。

設定とコンパイル

上述の "Naming fixes in Policy_sh.SH may invalidate Policy.sh" も 参照してください。

  • CCINCDIR and CCLIBDIR for the mingw64 cross-compiler are now correctly under $(CCHOME)\mingw\include and \lib rather than immediately below $(CCHOME).

    mingw64 クロスコンパイラ用の CCINCDIR と CCLIBDIR は、直後に記述している $(CCHOME) ではなく、正しく $(CCHOME)\mingw\include\lib を 使うようになりました。

    This means the "incpath", "libpth", "ldflags", "lddlflags" and "ldflags_nolargefiles" values in Config.pm and Config_heavy.pl are now set correctly.

    これは、Config.pmConfig_heavy.pl "incpath", "libpth", "ldflags", "lddlflags", "ldflags_nolargefiles" の値が正しく設定されることを意味します。

  • make test.valgrind has been adjusted to account for cpan/dist/ext separation.

    make test.valgrindcpan/dist/ext の分割に対応するように 調整されました。

  • On compilers that support it, -Wwrite-strings is now added to cflags by default.

    対応しているコンパイラでは、-Wwrite-strings がデフォルトで cflags に 追加されるようになりました。

  • The Encode module can now (once again) be included in a static Perl build. The special-case handling for this situation got broken in Perl 5.11.0, and has now been repaired.

    Encode モジュールは(再び)静的 Perl ビルドに含まれるようになりました。 この状況のための特殊ケースの扱いは Perl 5.11.0 で壊れていましたが、 修復されました。

  • The previous default size of a PerlIO buffer (4096 bytes) has been increased to the larger of 8192 bytes and your local BUFSIZ. Benchmarks show that doubling this decade-old default increases read and write performance by around 25% to 50% when using the default layers of perlio on top of unix. To choose a non-default size, such as to get back the old value or to obtain an even larger value, configure with:

    PerlIO バッファの以前のデフォルトサイズ (4096 バイト) は、8192 バイトと ローカルの BUFSIZ のどちらか大きい方に増やされました。 ベンチマークに寄れば、10 年単位の古いデフォルトを倍にすることで、 unix の top で perlIO のデフォルト層を使ったときに 25% から 50% 読み書き性能が向上しました。 古い値に戻したり、より大きな値にするために、デフォルトでないサイズを 選択したい場合は、以下のように設定します:

         ./Configure -Accflags=-DPERLIOBUF_DEFAULT_BUFSIZ=N

    where N is the desired size in bytes; it should probably be a multiple of your page size.

    ここで N は設定したいバイト数です; これはおそらくページサイズの倍数に するべきでしょう。

  • An "incompatible operand types" error in ternary expressions when building with clang has been fixed (5.12.2).

    clang でビルドしたときに 3 項演算子で "incompatible operand types" エラーが発生する問題が修正されました (5.12.2)。

  • Perl now skips setuid File::Copy tests on partitions it detects mounted as nosuid (5.12.2).

    Perl は、nosuid でマウントされていることが検出されたパーティションでは File::Copy の setuid でのテストを省略するようになりました (5.12.2)。

プラットフォーム対応

新しいプラットフォーム

AIX

Perl now builds on AIX 4.2 (5.12.1).

Perl を AIX 4.2 でビルドできるようになりました (5.12.1)。

中断したプラットフォーム

Apollo DomainOS

The last vestiges of support for this platform have been excised from the Perl distribution. It was officially discontinued in version 5.12.0. It had not worked for years before that.

このプラットフォームの対応の最後の名残が Perl 配布から削除されました。 これはバージョン 5.12.0 で公式に中断されました。 それ以前何年も作業されていませんでした。

MacOS Classic

The last vestiges of support for this platform have been excised from the Perl distribution. It was officially discontinued in an earlier version.

このプラットフォームの対応の最後の名残が Perl 配布から削除されました。 これはもっと前のバージョンで公式に中断されました。

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

AIX

  • README.aix has been updated with information about the XL C/C++ V11 compiler suite (5.12.2).

    README.aix は、XL C/C++ V11 コンパイラスイートに関する情報で 更新されました (5.12.2)。

ARM

  • The d_u32align configuration probe on ARM has been fixed (5.12.2).

    ARM での d_u32align 設定調査が修正されました (5.12.2)。

Cygwin

  • MakeMaker has been updated to build manpages on cygwin.

    MakeMaker は cygwin で man ページをビルドするように更新されました。

  • Improved rebase behaviour

    改良された rebase の振る舞い

    If a DLL is updated on cygwin the old imagebase address is reused. This solves most rebase errors, especially when updating on core DLL's. See http://www.tishler.net/jason/software/rebase/rebase-2.4.2.README for more information.

    cygwin で DLL が更新されると、古いイメージベースアドレスは再利用されます。 これはほとんどの rebase エラー、特にコア DLL の更新時のエラーを 解決します。 さらなる情報については http://www.tishler.net/jason/software/rebase/rebase-2.4.2.README を 参照してください。

  • Support for the standard cygwin dll prefix (needed for FFIs)

    標準 cygwin dll 接頭辞の対応 (FFI で必要)

  • Updated build hints file

    更新されたビルドヒントファイル

FreeBSD 7

  • FreeBSD 7 no longer contains /usr/bin/objformat. At build time, Perl now skips the objformat check for versions 7 and higher and assumes ELF (5.12.1).

    FreeBSD 7 はもはや /usr/bin/objformat を含んでいません。 ビルド時に、バージョンが 7 以上の場合は objformat のチェックを スキップし、ELF を仮定します (5.12.1)。

HP-UX

  • Perl now allows -Duse64bitint without promoting to use64bitall on HP-UX (5.12.1).

    HP-UX で use64bitall に昇格することなく -Duse64bitint を 使えるようになりました (5.12.1)。

IRIX

  • Conversion of strings to floating-point numbers is now more accurate on IRIX systems [perl #32380].

    文字列から浮動小数点数への変換は IRIX システムでより精密になりました [perl #32380]。

Mac OS X

  • Early versions of Mac OS X (Darwin) had buggy implementations of the setregid(), setreuid(), setrgid(,) and setruid() functions, so Perl would pretend they did not exist.

    初期のバージョンの Mac OS X (Darwin) は setregid(), setreuid(), setrgid(,), setruid() 関数の実装がバグっていたので、Perl はそれらが 存在しない振りをしていました。

    These functions are now recognised on Mac OS 10.5 (Leopard; Darwin 9) and higher, as they have been fixed [perl #72990].

    これらの関数はMac OS 10.5 (Leopard; Darwin 9) で認められるようになったので、 これは修正されました [perl #72990]。

MirBSD

  • Previously if you built Perl with a shared libperl.so on MirBSD (the default config), it would work up to the installation; however, once installed, it would be unable to find libperl. Path handling is now treated as in the other BSD dialects.

    以前は、MirBSD で共有 libperl.so で Perl をビルドする(デフォルト設定)と、 インストールまでは動作します; しかし一旦インストールすると、 libperl が見つからなくなります。 Path の扱いは、他の BSD 方言と同じように扱われるようになりました。

NetBSD

  • The NetBSD hints file has been changed to make the system malloc the default.

    NetBSD ヒントファイルは、システムの malloc がデフォルトに なるように変更されました。

OpenBSD

  • OpenBSD > 3.7 has a new malloc implementation which is mmap-based, and as such can release memory back to the OS; however, Perl's use of this malloc causes a substantial slowdown, so we now default to using Perl's malloc instead [perl #75742].

    OpenBSD > 3.7 は mmap-ベースの新しい malloc の実装があり、 メモリを OS に返せるようになっています; しかし、Perl のこの malloc の 使用によりかなりの速度低下を引き起こすので、代わりに Perl の malloc を 使うことを新しいデフォルトにしました [perl #75742]。

OpenVOS

  • Perl now builds again with OpenVOS (formerly known as Stratus VOS) [perl #78132] (5.12.3).

    Perl は再び (以前は Stratus VOS として知られていた) OpenVOS で ビルドできるようになりました [perl #78132] (5.12.3)。

Solaris

  • DTrace is now supported on Solaris. There used to be build failures, but these have been fixed [perl #73630] (5.12.3).

    DTrace は Solaris に対応しました。 以前はビルドに失敗していましたが、これは修正されました [perl #73630] (5.12.3)。

VMS

  • Extension building on older (pre 7.3-2) VMS systems was broken because configure.com hit the DCL symbol length limit of 1K. We now work within this limit when assembling the list of extensions in the core build (5.12.1).

    古い (7.3-2 以前の) VMS システムでのエクステンションのビルドは、 configure.com が DCL シンボル長の制限である 1K に引っかかったために 壊れていました。 コアビルドのエクステンションの一覧のアセンブル時にはこの制限内に なるようにしました (5.12.1)。

  • We fixed configuring and building Perl with -Uuseperlio (5.12.1).

    Perl の -Uuseperlio 付きでの設定とビルドを修正しました (5.12.1)。

  • PerlIOUnix_open now honours the default permissions on VMS.

    PerlIOUnix_open は VMS のデフォルトパーミッションを 考慮するようになりました。

    When perlio became the default and unix became the default bottom layer, the most common path for creating files from Perl became PerlIOUnix_open, which has always explicitly used 0666 as the permission mask. This prevents inheriting permissions from RMS defaults and ACLs, so to avoid that problem, we now pass 0777 to open(). In theVMS CRTL, 0777 has a special meaning over and above intersecting with the current umask; specifically, it allows Unix syscalls to preserve native default permissions (5.12.3).

    perlio がデフォルトになり、unix がデフォルトの底の層になったとき、 Perl からファイルを作成する最も一般的な方法は、パーミッションマスクとして 常に明示的に 0666 を使う PerlIOUnix_open になりました。 これはパーミッションを RMS デフォルトと ACL から継承するのを 妨げるので、この問題を回避するために、 open() に 0777 を渡すようになりました。 theVMS CRTL において、0777 は現在の umask との交差に加えて、特別な 意味を持ちます; 特に、これは Unix syscall がネイティブなデフォルトのパーミッションを 保存できるようになります (5.12.3)。

  • The shortening of symbols longer than 31 characters in the core C sources and in extensions is now by default done by the C compiler rather than by xsubpp (which could only do so for generated symbols in XS code). You can reenable xsubpp's symbol shortening by configuring with -Uuseshortenedsymbols, but you'll have some work to do to get the core sources to compile.

    コア C ソースとエクステンションでの 31 文字より長いシンボルの短縮化は デフォルトでは xsubpp (XS コードで生成されたシンボルに対してのみ できます) ではなく C コンパイラで行うようになりました。 設定時に -Uuseshortenedsymbols を指定することで、xsubpp のシンボル短縮化を 再有効化できますが、コアソースをコンパイルするには多少の作業が必要です。

  • Record-oriented files (record format variable or variable with fixed control) opened for write by the perlio layer will now be line-buffered to prevent the introduction of spurious line breaks whenever the perlio buffer fills up.

    レコード指向ファイル (レコード形式変数や固定制御付き変数) を perlio 層で 書き込みように開いたとき、PerlIO バッファが埋まったときに偽の行分割が 導入されるのを避けるために、行バッファリングを使うようになりました。

  • git_version.h is now installed on VMS. This was an oversight in v5.12.0 which caused some extensions to fail to build (5.12.2).

    git_version.h がインストールされるようになりました。 これは v5.12.0 にあったミスで、これによりいくつかのエクステンションが ビルドできなくなっていました (5.12.2)。

  • Several memory leaks in stat() have been fixed (5.12.2).

    stat() のいくつかのメモリリークが 修正されました (5.12.2)。

  • A memory leak in Perl_rename() due to a double allocation has been fixed (5.12.2).

    二重割り当てによる Perl_rename() でのメモリリークが 修正されました (5.12.2)。

  • A memory leak in vms_fid_to_name() (used by realpath() and realname()> has been fixed (5.12.2).

    (realpath() と realname() で使われている) vms_fid_to_name() での メモリリークが修正されました (5.12.2)。

Windows

上述の "fork() emulation will not wait for signalled children""Perl source code is read in text mode on Windows" も参照してください。

  • Fixed build process for SDK2003SP1 compilers.

    SDK2003SP1 コンパイラのビルドプロセスが修正されました。

  • Compilation with Visual Studio 2010 is now supported.

    Visual Studio 2010 でのコンパイルに対応しました。

  • When using old 32-bit compilers, the define _USE_32BIT_TIME_T is now set in $Config{ccflags}. This improves portability when compiling XS extensions using new compilers, but for a Perl compiled with old 32-bit compilers.

    古い 32-ビットコンパイラを使ったとき、_USE_32BIT_TIME_T 定義が $Config{ccflags} に設定されます。 これによって、新しいコンパイラを使って XS エクステンションを コンパイルするけれども、Perl 本体は古い 32-ビットコンパイラで コンパイルしたときの互換性が向上します。

  • $Config{gccversion} is now set correctly when Perl is built using the mingw64 compiler from http://mingw64.org [perl #73754].

    $Config{gccversion} は、Perl が http://mingw64.org の mingw64 コンパイラを使ってビルドされたときに正しく 設定されるようになりました [perl #73754]。

  • When building Perl with the mingw64 x64 cross-compiler incpath, libpth, ldflags, lddlflags and ldflags_nolargefiles values in Config.pm and Config_heavy.pl were not previously being set correctly because, with that compiler, the include and lib directories are not immediately below $(CCHOME) (5.12.2).

    Perl を mingw64 x64 クロスコンパイラでビルドするとき、 Config.pmConfig_heavy.pl にある incpath, libpth, ldflags, lddlflags, ldflags_nolargefiles の 値が正しくセットされていませんでした; これは、このコンパイラでは、インクルードとライブラリのディレクトリが $(CCHOME) の直下ではないからです (5.12.2)。

  • The build process proceeds more smoothly with mingw and dmake when C:\MSYS\bin is in the PATH, due to a Cwd fix.

    Cwd の修正により、PATH に C:\MSYS\bin がある時に mingw と dmake を 使ってよりスムーズにビルドプロセスが進むようになりました。

  • Support for building with Visual C++ 2010 is now underway, but is not yet complete. See README.win32 or perlwin32 for more details.

    Visual C++ 2010 でのビルド対応が進行中ですが、まだ完全ではありません。 さらなる詳細については README.win32perlwin32 を参照してください。

  • The option to use an externally-supplied crypt(), or to build with no crypt() at all, has been removed. Perl supplies its own crypt() implementation for Windows, and the political situation that required this part of the distribution to sometimes be omitted is long gone.

    外部供給される crypt() を使ったり、全く crypt() を使わずにビルドするための オプションは削除されました。 Perl は Windows 用に独自の crypt() 実装を提供し、 ときどきこの配布の一部を省略する必要があるという政治的な状況は なくなって久しいです。

内部の変更

新しい API

正しいスレッド作成を容易にするために CLONE_PARAMS 構造体が追加されました

Modules that create threads should now create CLONE_PARAMS structures by calling the new function Perl_clone_params_new(), and free them with Perl_clone_params_del(). This will ensure compatibility with any future changes to the internals of the CLONE_PARAMS structure layout, and that it is correctly allocated and initialised.

スレッドを作成するモジュールは、新しい関数である Perl_clone_params_new() を 呼び出すことで CLONE_PARAMS 構造体を作成し、Perl_clone_params_del() で 解放するようになりました。 これにより、将来 CLONE_PARAMS の内部配置が変更されたときの互換性を 確保して、正しく割り当てと初期化が行われるようにします。

新しいパース関数

Several functions have been added for parsing Perl statements and expressions. These functions are meant to be used by XS code invoked during Perl parsing, in a recursive-descent manner, to allow modules to augment the standard Perl syntax.

文や式のパースのためのいくつかの関数が追加されました: これらの関数は、Perl のパース中に再帰下降の方式で XS コードによって起動され、 モジュールが標準 Perl 文法を拡張できるようにします。

ヒントハッシュ API

A new C API for introspecting the hinthash %^H at runtime has been added. See cop_hints_2hv, cop_hints_fetchpvn, cop_hints_fetchpvs, cop_hints_fetchsv, and hv_copy_hints_hv in perlapi for details.

ヒントハッシュ %^H を実行時に内部調査するための新しい C API が 追加されました。 詳しくは perlapicop_hints_2hv, cop_hints_fetchpvn, cop_hints_fetchpvs, cop_hints_fetchsv, hv_copy_hints_hv を 参照してください。

A new, experimental API has been added for accessing the internal structure that Perl uses for %^H. See the functions beginning with cophh_ in perlapi.

Perl が %^H のために使う内部構造にアクセスするための新しい実験的な API が追加されました。 perlapi の、cophh_ で始まる関数を参照してください。

caller() への C インターフェース

The caller_cx function has been added as an XSUB-writer's equivalent of caller(). See perlapi for details.

caller_cx 関数は、XSUB-作者のための caller() の等価物として追加されました。 詳しくは perlapi を参照してください。

サブルーチン毎のカスタムチェックフック

XS code in an extension module can now annotate a subroutine (whether implemented in XS or in Perl) so that nominated XS code will be called at compile time (specifically as part of op checking) to change the op tree of that subroutine. The compile-time check function (supplied by the extension module) can implement argument processing that can't be expressed as a prototype, generate customised compile-time warnings, perform constant folding for a pure function, inline a subroutine consisting of sufficiently simple ops, replace the whole call with a custom op, and so on. This was previously all possible by hooking the entersub op checker, but the new mechanism makes it easy to tie the hook to a specific subroutine. See "cv_set_call_checker" in perlapi.

エクステンションモジュールの XS コードはサブルーチンに (XS で 実装されているか Perl で実装されているか) のアノテーションが 付けられるようになったので、任命された XS コードはそのサブルーチンの op 木を変更するためにコンパイル時 (具体的には op チェックの一部として) 呼び出されます。 (エクステンションモジュールによって供給される) コンパイル時のチェック関数は プロトタイプとして記述できない引数処理の実装、カスタマイズされた コンパイル時警告の生成、純粋な関数のための定数の畳み込みの実行、 充分に単純な op からなるサブルーチンのインライン化、呼び出し全体の カスタム op への置き換えなどが可能です。 以前はこれは全て entersub op チェッカをフックすることで可能でしたが、 新しい機構は簡単にフックを特定のサブルーチンに結びつけることができます。 "cv_set_call_checker" in perlapi を参照してください。

To help in writing custom check hooks, several subtasks within standard entersub op checking have been separated out and exposed in the API.

カスタムチェックフックを書くのを助けるために、標準の entersub op チェックに あるいくつかの副タスクが分離され、API に露出しました。

カスタム op への改良された対応

Custom ops can now be registered with the new custom_op_register C function and the XOP structure. This will make it easier to add new properties of custom ops in the future. Two new properties have been added already, xop_class and xop_peep.

カスタム ops は新しい custom_op_register C 関数と XOP 構造体で 登録できるようになりました。 これにより、将来カスタム op の新しいプロパティをより簡単に 追加できるようになります。 二つの新しいプロパティである xop_classxop_peep が既に 追加されています。

xop_class is one of the OA_*OP constants. It allows B and other introspection mechanisms to work with custom ops that aren't BASEOPs. xop_peep is a pointer to a function that will be called for ops of this type from Perl_rpeep.

xop_class は OA_*OP 定数の一つです。 これにより、B やその他の内部検査機構が BASEOP でないカスタム op で 動作するようになります。 xop_peep は、Perl_rpeep からこの種類の op を呼び出す関数への ポインタです。

さらなる詳細については "Custom Operators" in perlguts"Custom Operators" in perlapi を参照してください。

The old PL_custom_op_names/PL_custom_op_descs interface is still supported but discouraged.

古い PL_custom_op_names/PL_custom_op_descs インターフェースもまだ 対応していますが、勧められません。

スコープフック

It is now possible for XS code to hook into Perl's lexical scope mechanism at compile time, using the new Perl_blockhook_register function. See "Compile-time scope hooks" in perlguts.

新しい Perl_blockhook_register 関数を使って、コンパイル時の Perl の レキシカルスコープ機構にフックする XS コードが可能になりました。 "Compile-time scope hooks" in perlguts を参照してください。

覗き穴最適化器の再帰部分がフック可能になりました

In addition to PL_peepp, for hooking into the toplevel peephole optimizer, a PL_rpeepp is now available to hook into the optimizer recursing into side-chains of the optree.

PL_peepp に加えて、トップレベル覗き穴最適化器をフックするために、 op 木の再度チェーンへの再帰する最適化器へフックするための PL_rpeepp が利用可能になりました。

既存の関数の新しい非マジカル版

The following functions/macros have been added to the API. The *_nomg macros are equivalent to their non-_nomg variants, except that they ignore get-magic. Those ending in _flags allow one to specify whether get-magic is processed.

以下の関数/マクロが API に追加されました。 *_nomg マクロは _nomg なし版と等価ですが、get-magic を無視します。 _flags で終わっているものは、get-magic を処理するかどうかを 指定できます。

  sv_2bool_flags
  SvTRUE_nomg
  sv_2nv_flags
  SvNV_nomg
  sv_cmp_flags
  sv_cmp_locale_flags
  sv_eq_flags
  sv_collxfrm_flags

In some of these cases, the non-_flags functions have been replaced with wrappers around the new functions.

これらのケースのいくつかでは、非-_flags 関数は新しい関数の ラッパーと置き換えられました。

既存の関数のpv/pvs/sv 版

Many functions ending with pvn now have equivalent pv/pvs/sv versions.

末尾に pvn が付く多くの関数に、等価な pv/pvs/sv 版が追加されました。

リスト op 構築関数

List op-building functions have been added to the API. See op_append_elem, op_append_list, and op_prepend_elem in perlapi.

リスト op 構築関数が API に追加されました。 perlapiop_append_elem, op_append_list, op_prepend_elem を参照してください。

The LINKLIST macro, part of op building that constructs the execution-order op chain, has been added to the API.

実行順 op チェーンを構成する op 構築の一部である LINKLIST マクロが追加されました。

ローカル化関数

The save_freeop, save_op, save_pushi32ptr and save_pushptrptr functions have been added to the API.

save_freeop, save_op, save_pushi32ptr, save_pushptrptr 関数が API に追加されました。

スタッシュ名

A stash can now have a list of effective names in addition to its usual name. The first effective name can be accessed via the HvENAME macro, which is now the recommended name to use in MRO linearisations (HvNAME being a fallback if there is no HvENAME).

スタッシュは、通常の名前に追加して、有向な名前のリストを持つように なりました。 最初の有効な名前は HvENAME マクロ経由でアクセスでき、これは MRO 線形化で使う推奨される名前となりました (HvENAME がない場合は HvNAME にフォールバックします)。

These names are added and deleted via hv_ename_add and hv_ename_delete. These two functions are not part of the API.

これらの名前は hv_ename_addhv_ename_delete を使って追加および 削除されます。 これら二つの関数は API の一部では ありません

マジックの検索と削除のための新しい関数

The mg_findext() and sv_unmagicext() functions have been added to the API. They allow extension authors to find and remove magic attached to scalars based on both the magic type and the magic virtual table, similar to how sv_magicext() attaches magic of a certain type and with a given virtual table to a scalar. This eliminates the need for extensions to walk the list of MAGIC pointers of an SV to find the magic that belongs to them.

mg_findext() 関数と sv_unmagicext() 関数が API に追加されました。 これらはエクステンションの作者がマジックの種類およびマジックの仮想テーブルを 基に、スカラに付加されているマジックを探したり削除したりできるようにします; sv_magicext() が特定の種類と与えられた仮想テーブルのマジックをスカラに 付与する方法と同様です。 これにより、SV に付与されているマジックを探すために、エクステンションが その MAGIC ポインタを辿る必要をなくします。

find_rundefsv

This function returns the SV representing $_, whether it's lexical or dynamic.

この関数は、レキシカルであろうと動的であろうと、$_ を表現する SV を返します。

Perl_croak_no_modify

Perl_croak_no_modify() is short-hand for Perl_croak("%s", PL_no_modify).

Perl_croak_no_modify() は Perl_croak("%s", PL_no_modify) の 簡略形です。

PERL_STATIC_INLINE define

(PERL_STATIC_INLINE 定義)

The PERL_STATIC_INLINE define has been added to provide the best-guess incantation to use for static inline functions, if the C compiler supports C99-style static inline. If it doesn't, it'll give a plain static.

C コンパイラが C99 形式の静的インライン関数に対応している場合、 静的インライン関数を使うような指示を提供する、 PERL_STATIC_INLINE 定義が追加されました。 対応していない場合は、普通の static を返します。

HAS_STATIC_INLINE can be used to check if the compiler actually supports inline functions.

HAS_STATIC_INLINE はコンパイラが実際にインライン関数に対応しているか どうかをチェックするのに使えます。

New pv_escape option for hexadecimal escapes

(16 進エスケープのための新しい pv_escape オプション)

A new option, PERL_PV_ESCAPE_NONASCII, has been added to pv_escape to dump all characters above ASCII in hexadecimal. Before, one could get all characters as hexadecimal or the Latin1 non-ASCII as octal.

pv_escape に、ASCII 以上の全ての文字を 16 進数でダンプする PERL_PV_ESCAPE_NONASCII オプションが新しく追加されました。 以前は、全ての文字を 16 進数にするか、Latin1 非-ASCII を 8 進数にするか でした。

lex_start

lex_start has been added to the API, but is considered experimental.

lex_start が API に追加されましたが、実験的なものと考えられています。

op_scope() と op_lvalue()

The op_scope() and op_lvalue() functions have been added to the API, but are considered experimental.

op_scope() 関数と op_lvalue() 関数が API に追加されましたが、実験的なものと 考えられています。

C API の変更

PERL_POLLUTE has been removed

(PERL_POLLUTE は削除されました)

The option to define PERL_POLLUTE to expose older 5.005 symbols for backwards compatibility has been removed. Its use was always discouraged, and MakeMaker contains a more specific escape hatch:

後方互換性のために古い 5.005 のシンボルを露出させるための PERL_POLLUTE を定義するオプションは削除されました。 この使用は常に勧められず、 MakeMaker はより具体的な回避方法を持っています:

    perl Makefile.PL POLLUTE=1

This can be used for modules that have not been upgraded to 5.6 naming conventions (and really should be completely obsolete by now).

これは、まだ 5.6 命名規約に更新されていない (そして今では完全に 古いものである) モジュールで使えます。

XS モジュールを読み込むときのチェック API の互換性

When Perl's API changes in incompatible ways (which usually happens between major releases), XS modules compiled for previous versions of Perl will no longer work. They need to be recompiled against the new Perl.

Perl の API が互換性のない形で変更されたとき (普通はメジャーリリース間で 起こります)、以前のバージョンの Perl 用にコンパイルされた XS モジュールは もはや動作しなくなります。 新しい Perl 用に再コンパイルする必要があります。

The XS_APIVERSION_BOOTCHECK macro has been added to ensure that modules are recompiled and to prevent users from accidentally loading modules compiled for old perls into newer perls. That macro, which is called when loading every newly compiled extension, compares the API version of the running perl with the version a module has been compiled for and raises an exception if they don't match.

XS_APIVERSION_BOOTCHECK マクロは、確実にモジュールが再コンパイルされて、 ユーザーが間違って古い perl 用にコンパイルされたモジュールを新しい perl で 読み込むのを防ぐために追加されました。 新しくコンパイルされたエクステンションが読み込まれる度に呼び出される このマクロは、実行中の perl の API のバージョンと、モジュールのコンパイルされた バージョンを比較し、それが一致しなければ例外を発生させます。

Perl_fetch_cop_label

The first argument of the C API function Perl_fetch_cop_label has changed from struct refcounted_he * to COP *, to insulate the user from implementation details.

C API 関数 Perl_fetch_cop_label の第 1 引数は、ユーザーから実装詳細を 分離するために、struct refcounted_he * から COP * に変更されました。

This API function was marked as "may change", and likely isn't in use outside the core. (Neither an unpacked CPAN nor Google's codesearch finds any other references to it.)

この API 関数は「変更されるかもしれない」という印が付けられ、 コアの外で使われることはなさそうです。 (CPAN を展開したものや Google コードサーチではこれを参照しているものは 見つかりませんでした。)

GvCV() と GvGP() はもはや左辺値ではありません

The new GvCV_set() and GvGP_set() macros are now provided to replace assignment to those two macros.

新しい GvCV_set() マクロと GvGP_set() マクロがこれら二つのマクロへの 代入の代替として提供されています。

This allows a future commit to eliminate some backref magic between GV and CVs, which will require complete control over assignment to the gp_cv slot.

これにより、gp_cv スロットへの代入を完全に制御するのに必要な、 GV と CV の間の後方参照マジックを取り除くためのコミットが将来 出来るようになります。

CvGV() はもはや左辺値ではありません

Under some circumstances, the CvGV() field of a CV is now reference-counted. To ensure consistent behaviour, direct assignment to it, for example CvGV(cv) = gv is now a compile-time error. A new macro, CvGV_set(cv,gv) has been introduced to run this operation safely. Note that modification of this field is not part of the public API, regardless of this new macro (and despite its being listed in this section).

ある種の状況では、CV の CvGV() フィールドは参照カウントされます。 一貫性のある振る舞いを保証するために、例えば CvGV(cv) = gv のような 直接の代入はコンパイルエラーになります。 新しいマクロである CvGV_set(cv,gv) が、この操作を安全に行うために 導入されました。 この新しいマクロにも関わらず(そしてこの節に書いているにも関わらず) このフィールドの変更は公式 API の一部ではないことに注意してください。

CvSTASH() はもはや左辺値ではありません

The CvSTASH() macro can now only be used as an rvalue. CvSTASH_set() has been added to replace assignment to CvSTASH(). This is to ensure that backreferences are handled properly. These macros are not part of the API.

CvSTASH() マクロは右辺値としてのみ使えるようになりました。 CvSTASH_set() が、CvSTASH() への代入の代わりとして追加されました。 これは、バックリファレンスが正しく扱われるのを保証するためです。 これらのマクロは API の一部ではありません。

Calling conventions for newFOROP and newWHILEOP

(newFOROPnewWHILEOP の呼び出し規約)

The way the parser handles labels has been cleaned up and refactored. As a result, the newFOROP() constructor function no longer takes a parameter stating what label is to go in the state op.

パーサがラベルを扱う方法が整理され、リファクタリングされました。 結果として、newFOROP() コンストラクタ関数は、もはやどのラベルが状態に 入るかを示す引数を取らなくなりました。

The newWHILEOP() and newFOROP() functions no longer accept a line number as a parameter.

newWHILEOP() 関数と newFOROP() 関数はもはや行番号を引数として 受け付けなくなりました。

Flags passed to uvuni_to_utf8_flags and utf8n_to_uvuni

(uvuni_to_utf8_flagsutf8n_to_uvuni に渡されるフラグ)

Some of the flags parameters to uvuni_to_utf8_flags() and utf8n_to_uvuni() have changed. This is a result of Perl's now allowing internal storage and manipulation of code points that are problematic in some situations. Hence, the default actions for these functions has been complemented to allow these code points. The new flags are documented in perlapi. Code that requires the problematic code points to be rejected needs to change to use the new flags. Some flag names are retained for backward source compatibility, though they do nothing, as they are now the default. However the flags UNICODE_ALLOW_FDD0, UNICODE_ALLOW_FFFF, UNICODE_ILLEGAL, and UNICODE_IS_ILLEGAL have been removed, as they stem from a fundamentally broken model of how the Unicode non-character code points should be handled, which is now described in "Non-character code points" in perlunicode. See also the Unicode section under "Selected Bug Fixes".

uvuni_to_utf8_flags() と utf8n_to_uvuni() へのフラグ引数の一部が 変更されました。 これは、ある種の状況で問題となる符号位置の内部保管と操作が可能になった 結果です。 従って、これらの関数のデフォルトアクションはこれらの符号位置を認めるように 補完されました。 新しいフラグは perlapi で文書化されています。 問題のある符号位置を拒絶することが必要なコードは、この新しいフラグを 使うように変更する必要があります。 一部のフラグ名は後方ソース互換性のために保持していますが、何もしません; 今ではデフォルトとなっています。 しかし UNICODE_ALLOW_FDD0, UNICODE_ALLOW_FFFF, UNICODE_ILLEGAL, UNICODE_IS_ILLEGAL は削除されました; "Non-character code points" in perlunicode に記述されているように、 Unicode 非文字符号位置をどう扱うべきかに関して本質的に壊れたモデルに 基づくものだからです。 "Selected Bug Fixes" の Unicode の節も参照してください。

非推奨の C API

Perl_ptr_table_clear

Perl_ptr_table_clear is no longer part of Perl's public API. Calling it now generates a deprecation warning, and it will be removed in a future release.

Perl_ptr_table_clear はもはや Perl の公式 API の一部ではありません。 これを呼び出すと非推奨警告が生成され、将来のリリースで削除されます。

sv_compile_2op

The sv_compile_2op() API function is now deprecated. Searches suggest that nothing on CPAN is using it, so this should have zero impact.

sv_compile_2op() API 関数は非推奨となりました。 検索した結果 CPAN にこれを使っているものはありませんでしたので、 これの影響はないはずです。

It attempted to provide an API to compile code down to an optree, but failed to bind correctly to lexicals in the enclosing scope. It's not possible to fix this problem within the constraints of its parameters and return value.

これは op 木へのコードをコンパイルするための API を提供しようとしましたが、 囲まれたスコープ内のレキシカルに対して正しく結びつけることに失敗していました。 引数と返り値の制限の中でこの問題を修正することは不可能です。

find_rundefsvoffset

The find_rundefsvoffset function has been deprecated. It appeared that its design was insufficient for reliably getting the lexical $_ at run-time.

find_rundefsvoffset 関数は非推奨となりました。 この設計は、確実に実行時にレキシカルな $_ を得るには不十分と思われます。

Use the new find_rundefsv function or the UNDERBAR macro instead. They directly return the right SV representing $_, whether it's lexical or dynamic.

代わりに、新しい find_rundefsv 関数か UNDERBAR マクロを使ってください。 これらはレキシカルか動的かに関わらず、 $_ を表現する正しい SV を 直接返します。

CALL_FPTR and CPERLscope

Those are left from an old implementation of MULTIPLICITY using C++ objects, which was removed in Perl 5.8. Nowadays these macros do exactly nothing, so they shouldn't be used anymore.

これらは Perl 5.8 で削除された、C++ オブジェクトを使った MULTIPLICITY の 古い実装から残されていました。 今ではこれらのマクロは全く何もしないので、もう使うべきではありません。

For compatibility, they are still defined for external XS code. Only extensions defining PERL_CORE must be updated now.

互換性のために、これらはまだ外部 XS コードのために定義されています。 PERL_CORE を定義しているエクステンションだけが今回 更新しなければなりません。

その他の内部の変更

スタックの巻き戻し

The protocol for unwinding the C stack at the last stage of a die has changed how it identifies the target stack frame. This now uses a separate variable PL_restartjmpenv, where previously it relied on the blk_eval.cur_top_env pointer in the eval context frame that has nominally just been discarded. This change means that code running during various stages of Perl-level unwinding no longer needs to take care to avoid destroying the ghost frame.

die の最終ステージの C スタックの巻き戻しのための手順は、どのように ターゲットスタックフレームを識別するかが変更されました。 今では別の変数 PL_restartjmpenv を使うようになりました; 以前は 名目上捨てられた eval コンテキストフレームにある blk_eval.cur_top_env ポインタに依存していました。 この変更は、Perl レベルの巻き戻しのさまざまなステージで実行中の コードが、もはや幽霊フレームを破壊することを避けるために気をつかう 必要はありません。

スコープスタックエントリ

The format of entries on the scope stack has been changed, resulting in a reduction of memory usage of about 10%. In particular, the memory used by the scope stack to record each active lexical variable has been halved.

スコープスタックのエントリの形式が変更され、結果としてメモリ消費が約 10 % 減少しました。 特に、それぞれのアクティブなレキシカル変数を記録するためのスコープスタックで 使われるメモリは半分になりました。

ポインタテーブルのためのメモリ割り当て

Memory allocation for pointer tables has been changed. Previously Perl_ptr_table_store allocated memory from the same arena system as SV bodies and HEs, with freed memory remaining bound to those arenas until interpreter exit. Now it allocates memory from arenas private to the specific pointer table, and that memory is returned to the system when Perl_ptr_table_free is called. Additionally, allocation and release are both less CPU intensive.

ポインタテーブルのためのメモリ割り当てが変更されました。 以前は Perl_ptr_table_storeSV ボディおよび HE と同じ領域から メモリを割り当て、解放されたメモリはインタプリタが終了するまでその領域に 残っていました。 今では特定のポインタテーブル専用の領域からメモリを割り当てられ、このメモリは Perl_ptr_table_free が呼び出されるとシステムに返されます。 さらに、割り当てと解放は両方とも CPU パワーを使わなくなります。

UNDERBAR

The UNDERBAR macro now calls find_rundefsv. dUNDERBAR is now a noop but should still be used to ensure past and future compatibility.

UNDERBAR マクロは find_rundefsv を呼び出すようになりました。 dUNDERBAR は何もしなくなりましたが、過去と将来の互換性のために まだ残されています。

文字列比較ルーチンの名前が変わりました

The ibcmp_* functions have been renamed and are now called foldEQ, foldEQ_locale, and foldEQ_utf8. The old names are still available as macros.

ibcmp_* 関数は名前が変わり、foldEQ, foldEQ_locale, foldEQ_utf8 と呼ばれます。 古い名前もまだマクロとして利用可能です。

chop and chomp implementations merged

(chopchomp の実装がマージされました)

The opcode bodies for chop and chomp and for schop and schomp have been merged. The implementation functions Perl_do_chop() and Perl_do_chomp(), never part of the public API, have been merged and moved to a static function in pp.c. This shrinks the Perl binary slightly, and should not affect any code outside the core (unless it is relying on the order of side-effects when chomp is passed a list of values).

chop および chomp のオペコードボディと schop および schomp の オペコードボディがマージされました。 実装関数である Perl_do_chop() と Perl_do_chomp() (公式 API ではありません) は マージされ、pp.c の静的関数として移動しました。 これにより Perl バイナリが少し小さくなり、(chomplist の値を 渡されたときの副作用の順序に依存していない限り) コアの外側のコードには 一切影響を与えないはずです。

バグ修正の抜粋

I/O

  • Perl no longer produces this warning:

    Perl は以下のような警告は出さなくなりました:

        $ perl -we 'open(my $f, ">", \my $x); binmode($f, "scalar")'
        Use of uninitialized value in binmode at -e line 1.
  • Opening a glob reference via open($fh, ">", \*glob) no longer causes the glob to be corrupted when the filehandle is printed to. This would cause Perl to crash whenever the glob's contents were accessed [perl #77492].

    open($fh, ">", \*glob) 経由でグロブリファレンスを開いたとき、 ファイルハンドルに出力されたときにグロブが壊れなくなりました。 これはグロブの内容にアクセスされたときに Perl のクラッシュを 引き起こしていました [perl #77492]。

  • PerlIO no longer crashes when called recursively, such as from a signal handler. Now it just leaks memory [perl #75556].

    PerlIO は、シグナルハンドラからのように、再帰的に呼び出されても もはやクラッシュしなくなりました。 今では単にメモリリークします [perl #75556]。

  • Most I/O functions were not warning for unopened handles unless the "closed" and "unopened" warnings categories were both enabled. Now only use warnings 'unopened' is necessary to trigger these warnings, as had always been the intention.

    ほとんどの I/O 関数は、"closed" と "unopened" の両方の警告カテゴリが 有効になっていない限り、開いていないハンドルに対して警告を 出していませんでした。 今では(意図していた通り)これらの警告を 出すには use warnings 'unopened' だけが必要です;

  • There have been several fixes to PerlIO layers:

    PerlIO 層でいくつかの修正が行われました:

    When binmode(FH, ":crlf") pushes the :crlf layer on top of the stack, it no longer enables crlf layers lower in the stack so as to avoid unexpected results [perl #38456].

    binmode(FH, ":crlf"):crlf 層をスタックの一番上にプッシュしたとき、 想定外の結果を引き起こさないように、スタックの下の方にある crlf 層を 有効にしなくなりました [perl #38456]。

    Opening a file in :raw mode now does what it advertises to do (first open the file, then binmode it), instead of simply leaving off the top layer [perl #80764].

    :raw モードでファイルを開くと、単に最上位層を取り除くのではなく、 公表している通りの動作(まずファイルを開き、それから binmode を 実行する)を実行するようになりました [perl #80764]。

    The three layers :pop, :utf8, and :bytes didn't allow stacking when opening a file. For example this:

    三つの層 :pop, :utf8, :bytes はファイルを開くときに スタックできませんでした。 例えばこれは:

        open(FH, ">:pop:perlio", "some.file") or die $!;

    would throw an "Invalid argument" error. This has been fixed in this release [perl #82484].

    "Invalid argument" エラーを投げていました。 これはこのリリースで修正されました [perl #82484]。

正規表現のバグ修正

  • The regular expression engine no longer loops when matching "\N{LATIN SMALL LIGATURE FF}" =~ /f+/i and similar expressions [perl #72998] (5.12.1).

    正規表現エンジンは "\N{LATIN SMALL LIGATURE FF}" =~ /f+/i や 同様の式でもはやループしなくなりました [perl #72998] (5.12.1)。

  • The trie runtime code should no longer allocate massive amounts of memory, fixing #74484.

    trie 実行時コードはもはや大量のメモリを割り当てなくなりました; #74484 を修正しています。

  • Syntax errors in (?{...}) blocks no longer cause panic messages [perl #2353].

    (?{...}) ブロック内の文法エラーでももはやパニックメッセージを 引き起こさなくなりました [perl #2353]。

  • A pattern like (?:(o){2})? no longer causes a "panic" error [perl #39233].

    (?:(o){2})? のようなパターンはもはや "panic" エラーを 引き起こさなくなりました [perl #39233]。

  • A fatal error in regular expressions containing (.*?) when processing UTF-8 data has been fixed [perl #75680] (5.12.2).

    UTF-8 データを処理するときの (.*?) を含む正規表現での致命的エラーは 修正されました [perl #75680] (5.12.2)。

  • An erroneous regular expression engine optimisation that caused regex verbs like *COMMIT sometimes to be ignored has been removed.

    間違った正規表現エンジンの最適化によって *COMMIT のような正規表現動詞が 時々無視されていた問題が修正されました。

  • The regular expression bracketed character class [\8\9] was effectively the same as [89\000], incorrectly matching a NULL character. It also gave incorrect warnings that the 8 and 9 were ignored. Now [\8\9] is the same as [89] and gives legitimate warnings that \8 and \9 are unrecognized escape sequences, passed-through.

    正規表現の大かっこで囲った文字クラス [\8\9] は実際には [89\000] と同様になっていて、間違って NULL 文字にマッチングしていました。 またこれは間違って 89 は無視されるという警告が出ていました。 今では [\8\9][89] と同じになり、\8\9 は 認識できないエスケープシーケンスなのでそのまま通すという正しい警告が出ます。

  • A regular expression match in the right-hand side of a global substitution (s///g) that is in the same scope will no longer cause match variables to have the wrong values on subsequent iterations. This can happen when an array or hash subscript is interpolated in the right-hand side, as in s|(.)|@a{ print($1), /./ }|g [perl #19078].

    同じスコープにある全体置換 (s///g) の右側にある正規表現マッチングは、 もはや引き続く反復で間違った値を持つ変数にマッチングしなくなりました。 これは、s|(.)|@a{ print($1), /./ }|g のように、配列やハッシュの添え字が 右側で展開されたときに起こります [perl #19078]。

  • Several cases in which characters in the Latin-1 non-ASCII range (0x80 to 0xFF) used not to match themselves, or used to match both a character class and its complement, have been fixed. For instance, U+00E2 could match both \w and \W [perl #78464] [perl #18281] [perl #60156].

    Latin-1 の非 ASCII 範囲 (0x80 から 0xFF) の文字は場合によっては 自分自身とマッチングしなかったり、ある文字クラスとその逆クラスの 兵法にマッチングしていたりしていましたが、これは修正されました。 例えば、U+00E2 は \w\W の両方にマッチングしていました [perl #78464] [perl #18281] [perl #60156]。

  • Matching a Unicode character against an alternation containing characters that happened to match continuation bytes in the former's UTF8 representation (like qq{\x{30ab}} =~ /\xab|\xa9/) would cause erroneous warnings [perl #70998].

    (qq{\x{30ab}} =~ /\xab|\xa9/ のように) 前の UTF8 表現の継続バイトとマッチングするような 文字を含む選択に対して Unicode 文字をマッチングすると、 間違った警告を引き起こしていました [perl #70998]。

  • The trie optimisation was not taking empty groups into account, preventing "foo" from matching /\A(?:(?:)foo|bar|zot)\z/ [perl #78356].

    トライ木最適化は空グループを考慮に入れておらず、"foo" が /\A(?:(?:)foo|bar|zot)\z/ にマッチングするのを 妨げていました [perl #78356]。

  • A pattern containing a + inside a lookahead would sometimes cause an incorrect match failure in a global match (for example, /(?=(\S+))/g) [perl #68564].

    前方参照内に + を含むパターンは時々 (例えば /(?=(\S+))/g のような) グローバルマッチングで間違ってマッチングに失敗していました [perl #68564]。

  • A regular expression optimisation would sometimes cause a match with a {n,m} quantifier to fail when it should have matched [perl #79152].

    正規表現最適化によって、{n,m} 量指定子付きのマッチングで マッチングするべきところ、時々失敗していました [perl #79152]。

  • Case-insensitive matching in regular expressions compiled under use locale now works much more sanely when the pattern or target string is internally encoded in UTF8. Previously, under these conditions the localeness was completely lost. Now, code points above 255 are treated as Unicode, but code points between 0 and 255 are treated using the current locale rules, regardless of whether the pattern or the string is encoded in UTF8. The few case-insensitive matches that cross the 255/256 boundary are not allowed. For example, 0xFF does not caselessly match the character at 0x178, LATIN CAPITAL LETTER Y WITH DIAERESIS, because 0xFF may not be LATIN SMALL LETTER Y in the current locale, and Perl has no way of knowing if that character even exists in the locale, much less what code point it is.

    use locale の影響下でコンパイルされた大文字小文字を無視する 正規表現マッチングは、パターンやターゲット文字列が内部的に UTF8 で エンコーディングされているときに、はるかにまともに動作するようになりました。 以前は、このような条件ではロケール性は完全に失われていました。 今では、255 を超える符号位置は Unicode として扱われますが、0 から 255 までは パターンや文字列が UTF8 でエンコーディングされているかどうかにかかわらず 現在のロケールルールを使って扱われるようになりました。 255/256 の境界をまたぐような稀な大文字小文字を無視するマッチングは 認められません。 例えば、0xFF は 0x178 LATIN CAPITAL LETTER Y WITH DIAERESIS と 大文字小文字なしにマッチングします; 0xFF は現在のロケールでは LATIN SMALL LETTER Y に含まれず、Perl はロケール中にこの文字が 含まれているかや、ましてやどの符号位置かを知る方法がないからです。

  • The (?|...) regular expression construct no longer crashes if the final branch has more sets of capturing parentheses than any other branch. This was fixed in Perl 5.10.1 for the case of a single branch, but that fix did not take multiple branches into account [perl #84746].

    The (?|...) 正規表現構造は、最後の枝がその他の枝よりも多い捕捉かっこの 集合を持つ場合にクラッシュしていました。 これは単一の枝の場合は Perl 5.10.1 で修正されましたが、 これは複数の枝を考慮に入れていませんでした [perl #84746]。

  • A bug has been fixed in the implementation of {...} quantifiers in regular expressions that prevented the code block in /((\w+)(?{ print $2 })){2}/ from seeing the $2 sometimes [perl #84294].

    正規表現での {...} 量指定子の実装により、 /((\w+)(?{ print $2 })){2}/ というコードブロックで時々 $2 が 見えなくなるというバグが修正されました [perl #84294]。

文法/パースバグ

  • when (scalar) {...} no longer crashes, but produces a syntax error [perl #74114] (5.12.1).

    when (scalar) {...} はもはやクラッシュせず、文法エラーを出します [perl #74114] (5.12.1)。

  • A label right before a string eval (foo: eval $string) no longer causes the label to be associated also with the first statement inside the eval [perl #74290] (5.12.1).

    文字列 eval (foo: eval $string) の直前のラベルは、もはや eval 内の 最初の文と結びつけられなくなりました [perl #74290] (5.12.1)。

  • The no 5.13.2 form of no no longer tries to turn on features or pragmata (like strict) [perl #70075] (5.12.2).

    no 5.13.2 形式の no はもはや機能や (strict のような) プラグマを 有効にしようとしなくなりました [perl #70075] (5.12.2)。

  • BEGIN {require 5.12.0} now behaves as documented, rather than behaving identically to use 5.12.0. Previously, require in a BEGIN block was erroneously executing the use feature ':5.12.0' and use strict behaviour, which only use was documented to provide [perl #69050].

    BEGIN {require 5.12.0}use 5.12.0 と同様に振る舞うのではなく、 文書化されている通りに振る舞うようになりました。 以前は、BEGIN ブロック内の require は間違って use feature ':5.12.0'use strict の振る舞いを実行していました; use だけが文書化されていました [perl #69050]。

  • A regression introduced in Perl 5.12.0, making my $x = 3; $x = length(undef) result in $x set to 3 has been fixed. $x will now be undef [perl #85508] (5.12.2).

    Perl 5.12.0 で導入された退行により、my $x = 3; $x = length(undef)$x3 に設定されていました。 $xundef になります [perl #85508] (5.12.2)。

  • When strict "refs" mode is off, %{...} in rvalue context returns undef if its argument is undefined. An optimisation introduced in Perl 5.12.0 to make keys %{...} faster when used as a boolean did not take this into account, causing keys %{+undef} (and keys %$foo when $foo is undefined) to be an error, which it should be so in strict mode only [perl #81750].

    strict "refs" モードがオフのとき、右辺値コンテキストでの %{...} は 引数が未定義のときには undef を返します。 Perl 5.12.0 で導入された、keys %{...} が真偽値として使われるときに 高速化する最適化はこれを考慮に入れておらず、 keys %{+undef} (および $foo が未定義のときのand keys %$foo) は、 strict モードが有効のときにだけエラーになるべきですが、そうでないときも エラーになっていました [perl #81750]。

  • Constant-folding used to cause

    定数の畳み込みは、以下のもの

      $text =~ ( 1 ? /phoo/ : /bear/)

    to turn into

    から以下への変換

      $text =~ /phoo/

    at compile time. Now it correctly matches against $_ [perl #20444].

    をコンパイル時に行っていました。 これは $_ に対して正しくマッチングするようになりました [perl #20444]。

  • Parsing Perl code (either with string eval or by loading modules) from within a UNITCHECK block no longer causes the interpreter to crash [perl #70614].

    UNITCHECK ブロック内からの (文字列 eval かモジュール読み込みによる) Perl コードのパースは、もはやインタプリタをクラッシュさせなくなりました [perl #70614]。

  • String evals no longer fail after 2 billion scopes have been compiled [perl #83364].

    20 億のスコープをコンパイルした後でももはや文字列 eval に 失敗しなくなりました [perl #83364]。

  • The parser no longer hangs when encountering certain Unicode characters, such as U+387 [perl #74022].

    U+387 のような、ある種の Unicode 文字に遭遇してもパーサはもはや ハングアップしなくなりました [perl #74022]。

  • Defining a constant with the same name as one of Perl's special blocks (like INIT) stopped working in 5.12.0, but has now been fixed [perl #78634].

    (INIT のような) Perl の特殊ブロックと同じ名前の定数の定義は 5.12.0 から動作しなくなっていました。 これは修正されました [perl #78634]。

  • A reference to a literal value used as a hash key ($hash{\"foo"}) used to be stringified, even if the hash was tied [perl #79178].

    ハッシュキーとして使われるリテラル値へのリファレンス ($hash{\"foo"}) は、 ハッシュが tie されていても文字列化されていました [perl #79178]。

  • A closure containing an if statement followed by a constant or variable is no longer treated as a constant [perl #63540].

    A closure containing an if 文に引き続いて定数や変数があるクロージャはもはや定数として 扱われなくなりました [perl #63540]。

  • state can now be used with attributes. It used to mean the same thing as my if any attributes were present [perl #68658].

    state は属性とともに使えるようになりました。 属性があっても、my と同じ意味になっていました [perl #68658]。

  • Expressions like @$a > 3 no longer cause $a to be mentioned in the "Use of uninitialized value in numeric gt" warning when $a is undefined (since it is not part of the > expression, but the operand of the @) [perl #72090].

    @$a > 3 のような式は、(> 式の一部ではなく、@ の オペランドなので) $a が未定義のときにもはや "Use of uninitialized value in numeric gt" 警告を出さなくなりました [perl #72090]。

  • Accessing an element of a package array with a hard-coded number (as opposed to an arbitrary expression) would crash if the array did not exist. Usually the array would be autovivified during compilation, but typeglob manipulation could remove it, as in these two cases which used to crash:

    (任意の式でなく) ハードコードされた数値でパッケージ配列の要素に アクセスすると、その要素がないときにクラッシュしていました。 普通は配列はコンパイル中に自動有効化されますが、型グロブの操作は これを取り除き、以下の二つのケースでクラッシュしていました:

      *d = *a;  print $d[0];
      undef *d; print $d[0];
  • The -C command-line option, when used on the shebang line, can now be followed by other options [perl #72434].

    -C コマンドラインオプションはシェバン行で使われたときに、他のオプションの 後で使えるようになりました [perl #72434]。

  • The B module was returning B::OPs instead of B::LOGOPs for entertry [perl #80622]. This was due to a bug in the Perl core, not in B itself.

    The B モジュールは entertry に対して B::LOGOP ではなく B::OP を返していました [perl #80622]。 これは B 自身ではなく Perl コアのバグによるものでした。

スタッシュ、グロブ、メソッド検索

Perl 5.10.0 introduced a new internal mechanism for caching MROs (method resolution orders, or lists of parent classes; aka "isa" caches) to make method lookup faster (so @ISA arrays would not have to be searched repeatedly). Unfortunately, this brought with it quite a few bugs. Almost all of these have been fixed now, along with a few MRO-related bugs that existed before 5.10.0:

Perl 5.10.0 では、メソッド検索をより速くするために MRO キャッシュする (メソッド解決順序、つまり親クラスのリスト; またの名を "isa" キャッシュ) ための新しい内部機構が導入されました (これにより @ISA が繰り返し検索する 必要がなくなりました)。 残念ながら、これにはいくつかバグがありました。 そのほとんどは、5.10.0 以前からあった MRO 関係のバグと共に、 今では修正されました:

  • The following used to have erratic effects on method resolution, because the "isa" caches were not reset or otherwise ended up listing the wrong classes. These have been fixed.

    以下のようなことをするとメソッド解決に間違った影響を与えていました; なぜなら "isa" キャッシュがリセットされなかったり、最終的に 間違ったクラスの一覧となったりしていたからです。 これらは修正されました。

    Aliasing packages by assigning to globs [perl #77358]

    (グロブに代入することでパッケージに別名をつける [perl #77358])

    Deleting packages by deleting their containing stash elements

    (含まれているスタッシュ要素を削除することでパッケージを削除する)

    Undefining the glob containing a package (undef *Foo::)

    (パッケージを含むグロブを未定義化する (undef *Foo::))

    Undefining an ISA glob (undef *Foo::ISA)

    (ISA グロブを未定義化する (undef *Foo::ISA))

    Deleting an ISA stash element (delete $Foo::{ISA})

    (ISA スタッシュ要素を削除する (delete $Foo::{ISA}))

    Sharing @ISA arrays between classes (via *Foo::ISA = \@Bar::ISA or *Foo::ISA = *Bar::ISA) [perl #77238]

    undef *Foo::ISA would even stop a new @Foo::ISA array from updating caches.

    undef *Foo::ISA は新しい @Foo::ISA の配列がキャッシュを 更新しないようになりました。

  • Typeglob assignments would crash if the glob's stash no longer existed, so long as the glob assigned to were named ISA or the glob on either side of the assignment contained a subroutine.

    型グロブの代入は、グロブのスタッシュがもはや存在しないときに 代入されたグロブが ISA という名前か、代入のどちらかの側にサブルーチンが 含まれているとクラッシュしていました。

  • PL_isarev, which is accessible to Perl via mro::get_isarev is now updated properly when packages are deleted or removed from the @ISA of other classes. This allows many packages to be created and deleted without causing a memory leak [perl #75176].

    mro::get_isarev 経由で Perl にアクセスできる PL_isarev は、 パッケージが削除されたり、他のクラスの @ISA からパッケージが 取り除かれたとき、適切に更新されるようになりました。 これにより多くのパッケージがメモリリークなしに作成および 削除できるようになります [perl #75176]。

In addition, various other bugs related to typeglobs and stashes have been fixed:

さらに、型グロブとスタッシュに関する様々なその他のバグが修正されました:

  • Some work has been done on the internal pointers that link between symbol tables (stashes), typeglobs, and subroutines. This has the effect that various edge cases related to deleting stashes or stash entries (for example, <%FOO:: = ()>), and complex typeglob or code-reference aliasing, will no longer crash the interpreter.

    シンボルテーブル(スタッシュ)、型グロブ、サブルーチンの間のリンクとなる 内部ポインタに対していくつかの作業が行われました。 この降下により、スタッシュやスタッシュのエントリの削除 (例えば <%FOO:: = ()>)や、複雑な型グロブとコードリファレンスの別名によって もはやインタプリタをクラッシュさせなくなりました。

  • Assigning a reference to a glob copy now assigns to a glob slot instead of overwriting the glob with a scalar [perl #1804] [perl #77508].

    グロブのコピーへのリファレンスの代入は、スカラのグロブを 上書きするのではなく、グロブスロットへの代入になりました [perl #1804] [perl #77508]。

  • A bug when replacing the glob of a loop variable within the loop has been fixed [perl #21469]. This means the following code will no longer crash:

    ループ中のループ変数のグロブを置き換えるときのバグが修正されました [perl #21469]。 これにより、以下のようなコードでもはやクラッシュしなくなりました:

        for $x (...) {
            *x = *y;
        }
  • Assigning a glob to a PVLV used to convert it to a plain string. Now it works correctly, and a PVLV can hold a glob. This would happen when a nonexistent hash or array element was passed to a subroutine:

    グロブから PVLV への代入は、普通の文字列へ変換されていました。 今ではこれは正しく動作し、PVLV はグロブを保持できるようになりました。 これは存在しないハッシュや配列の要素がサブルーチンに渡された時に 起きていました:

      sub { $_[0] = *foo }->($hash{key});
      # $_[0] would have been the string "*main::foo"

    It also happened when a glob was assigned to, or returned from, an element of a tied array or hash [perl #36051].

    また、グロブがtie された配列やハッシュに代入したりそこから返されたり したときにも起きていました [perl #36051]。

  • When trying to report Use of uninitialized value $Foo::BAR, crashes could occur if the glob holding the global variable in question had been detached from its original stash by, for example, delete $::{"Foo::"}. This has been fixed by disabling the reporting of variable names in those cases.

    Use of uninitialized value $Foo::BAR を報告しようとするとき、 例えば delete $::{"Foo::"} のように、問題になっているグローバル変数を 保持しているグロブが元のスタッシュから分離されたときに クラッシュすることがありました。 これは、このような場合には変数名を報告しないようにすることで 修正されました。

  • During the restoration of a localised typeglob on scope exit, any destructors called as a result would be able to see the typeglob in an inconsistent state, containing freed entries, which could result in a crash. This would affect code like this:

    スコープ終了によってローカル化された型グロブが復元している間に、 結果として呼び出されるデストラクタが、解放されているエントリを含む 一貫性のない状態の型グロブを参照することができ、結果として クラッシュすることがありました。 これは以下のようなコードに影響していました:

      local *@;
      eval { die bless [] }; # puts an object in $@
      sub DESTROY {
        local $@; # boom
      }

    Now the glob entries are cleared before any destructors are called. This also means that destructors can vivify entries in the glob. So Perl tries again and, if the entries are re-created too many times, dies with a "panic: gp_free ..." error message.

    グロブのエントリは、デストラクタが呼び出される前に クリアされるようになりました。 これはまた、デストラクタがグロブのエントリを有効化できることを意味します。 それで Perl は再挑戦し、もしエントリが何度も再作成されると "panic: gp_free ..." エラーメッセージを出して die します。

  • If a typeglob is freed while a subroutine attached to it is still referenced elsewhere, the subroutine is renamed to __ANON__ in the same package, unless the package has been undefined, in which case the __ANON__ package is used. This could cause packages to be sometimes autovivified, such as if the package had been deleted. Now this no longer occurs. The __ANON__ package is also now used when the original package is no longer attached to the symbol table. This avoids memory leaks in some cases [perl #87664].

    型グロブが解放されたときに、それに付加されているサブルーチンがまだ 他の場所から参照されていると、サブルーチンは同じパッケージで __ANON__ という名前に代わります(パッケージ名が未定義の場合は __ANON__ パッケージが使われます)。 これにより、例えばパッケージが削除されたときなどに、パッケージが 自動有効化されていました。 これはもはや起きなくなりました。 __ANON__ パッケージはまた、元のパッケージがもはやシンボルテーブルに 付加されていないときにも使われるようになりました。 これによりいくつかの場合でのメモリリークを防ぎます [perl #87664]。

  • Subroutines and package variables inside a package whose name ends with :: can now be accessed with a fully qualified name.

    名前が :: で終わるようなパッケージ内の、サブルーチンやパッケージ変数は 完全修飾名でアクセスできるようになりました。

Unicode

  • What has become known as "the Unicode Bug" is almost completely resolved in this release. Under use feature 'unicode_strings' (which is automatically selected by use 5.012 and above), the internal storage format of a string no longer affects the external semantics. [perl #58182].

    "the Unicode Bug" として知られるようになったものはほとんど完全に このリリースで解決しています。 use feature 'unicode_strings' (これは use 5.012 以降では自動的に 選択されます) の基では、文字列の内部ストレージ表現はもはや外部の 意味論に影響を受けません [perl #58182]。

    There are two known exceptions:

    二つの知られている例外があります:

    1. The now-deprecated, user-defined case-changing functions require utf8-encoded strings to operate. The CPAN module Unicode::Casing has been written to replace this feature without its drawbacks, and the feature is scheduled to be removed in 5.16.

      今では非推奨となった、ユーザー定義の大文字小文字変換関数は、操作するのに utf8-エンコードされた文字列を要求します。 CPAN モジュール Unicode::Casing が欠点なしにこの機能を置き換えるために 作成され、この機能は 5.16 で削除することが計画されています。

    2. quotemeta() (and its in-line equivalent \Q) can also give different results depending on whether a string is encoded in UTF-8. See "The "Unicode Bug"" in perlunicode.

      quotemeta() (およびインラインで等価な \Q) も、文字列が UTF-8 で エンコーディングされているかどうかに依存して異なる結果を返します。 "The "Unicode Bug"" in perlunicode を参照してください。

  • Handling of Unicode non-character code points has changed. Previously they were mostly considered illegal, except that in some place only one of the 66 of them was known. The Unicode Standard considers them all legal, but forbids their "open interchange". This is part of the change to allow internal use of any code point (see "Core Enhancements"). Together, these changes resolve [perl #38722], [perl #51918], [perl #51936], and [perl #63446].

    Unicode 非文字符号位置の扱いが変更されました。 以前は、これらの 66 のうちの一つが一部の場所で知られていることを除けば、 これらはほとんど不正であると考えられていました。 Unicode 標準はこれら全ては有効であるけれども、"open interchange" を 妨げるものであると考えられています。 これは、どのような符号位置でも内部利用できるようにする変更の一部です ("Core Enhancements" を参照してください)。 同時に、これらの変更は [perl #38722], [perl #51918], [perl #51936], [perl #63446] を解決します。

  • Case-insensitive "/i" regular expression matching of Unicode characters that match multiple characters now works much more as intended. For example

    複数の文字にマッチングする Unicode 文字への大文字小文字を無視する "/i" 正規表現は意図通り以上に動作するようになりました。 例えば

     "\N{LATIN SMALL LIGATURE FFI}" =~ /ffi/ui

    and

    および

     "ffi" =~ /\N{LATIN SMALL LIGATURE FFI}/ui

    are both true. Previously, there were many bugs with this feature. What hasn't been fixed are the places where the pattern contains the multiple characters, but the characters are split up by other things, such as in

    は両方とも真です。 以前は、この機能には多くのバグがありました。 まだ修正されていないものは、パターンに複数の文字が含まれている場所で あるけれども、その文字は以下のように、他のことによって分割されている 場合です

     "\N{LATIN SMALL LIGATURE FFI}" =~ /(f)(f)i/ui

    or

    または

     "\N{LATIN SMALL LIGATURE FFI}" =~ /ffi*/ui

    or

    または

     "\N{LATIN SMALL LIGATURE FFI}" =~ /[a-f][f-m][g-z]/ui

    None of these match.

    これらのいずれもマッチングしません。

    Also, this matching doesn't fully conform to the current Unicode Standard, which asks that the matching be made upon the NFD (Normalization Form Decomposed) of the text. However, as of this writing (April 2010), the Unicode Standard is currently in flux about what they will recommend doing with regard in such scenarios. It may be that they will throw out the whole concept of multi-character matches. [perl #71736].

    また、このマッチングはテキストの NFD (Normalization Form Decomposed) の マッチングによるという現在のUnicode 標準を完全には満たしていません。 しかし、これを書いている時点(2010 年 4 月)では、Unicode 標準は このような状況で推奨される動作について今のところ不安定です。 複数文字マッチングという概念全体を放り出すことになるかも知れません [perl #71736]。

  • Naming a deprecated character in \N{NAME} no longer leaks memory.

    非推奨の文字への \N{NAME} での命名でもはや メモリリークしなくなりました。

  • We fixed a bug that could cause \N{NAME} constructs followed by a single "." to be parsed incorrectly [perl #74978] (5.12.1).

    \N{NAME} 構造に引き続いて単一の "." がある場合に間違って パースされることによるバグを修正しました [perl #74978] (5.12.1)。

  • chop now correctly handles characters above "\x{7fffffff}" [perl #73246].

    chop"\x{7fffffff}" 以上の文字を正しく扱えるようになりました [perl #73246]。

  • Passing to index an offset beyond the end of the string when the string is encoded internally in UTF8 no longer causes panics [perl #75898].

    文字列が内部的に UTF8 でエンコーディングされているときに index に文字列の末尾を超えたオフセットを渡してももはや panic を 引き起こさなくなりました [perl #75898]。

  • warn() and die() now respect utf8-encoded scalars [perl #45549].

    warn() と die() は utf8-エンコードされたスカラを 認識するようになりました [perl #45549]。

  • Sometimes the UTF8 length cache would not be reset on a value returned by substr, causing length(substr($uni_string, ...)) to give wrong answers. With ${^UTF8CACHE} set to -1, it would also produce a "panic" error message [perl #77692].

    時々 UTF8 の length キャッシュが substr の返り値によってリセットされず、 そのために length(substr($uni_string, ...)) が間違った答えを 返していました。 ${^UTF8CACHE} に -1 をセットしていると、"panic" エラーメッセージも 引き起こしていました [perl #77692]。

tie、オーバーロードおよびその他のマジック

  • Overloading now works properly in conjunction with tied variables. What formerly happened was that most ops checked their arguments for overloading before checking for magic, so for example an overloaded object returned by a tied array access would usually be treated as not overloaded [RT #57012].

    オーバーロードは tie された変数と組み合わされたも正しく 動作するようになりました。 以前起きていたのは、ほとんどの op は引数のオーバーロードのチェックを マジックのチェックの 前に 行っていたので、例えば tie された 配列アクセスによって返されたオーバーロードされたオブジェクトは 普通はオーバーロードされていないものとして扱われていました [RT #57012]。

  • Various instances of magic (like tie methods) being called on tied variables too many or too few times have been fixed:

    tie された変数に対して、(tie メソッドのような) さまざまな種類のマジックを 呼び出す回数が多すぎたり少なすぎたりする問題が修正されました:

    • $tied->() did not always call FETCH [perl #8438].

      $tied->() はいつも呼び出されませんでした FETCH [perl #8438]。

    • Filetest operators and y/// and tr/// were calling FETCH too many times.

      ファイルテスト演算子と y///tr/// は FETCH を呼び出す回数が 多すぎました。

    • The = operator used to ignore magic on its right-hand side if the scalar happened to hold a typeglob (if a typeglob was the last thing returned from or assigned to a tied scalar) [perl #77498].

      = 演算子は、もしスカラがたまたま型グロブを保持していた場合 (もし型グロブが tie スカラから返されたり代入されたりした最後のものだった 場合)、右側のマジックを無視していました [perl #77498]。

    • Dereference operators used to ignore magic if the argument was a reference already (such as from a previous FETCH) [perl #72144].

      デリファレンス演算子は、もし引数が (以前の FETCH からのように) すでにリファレンスで合った場合にマジックを無視していました [perl #72144]。

    • splice now calls set-magic (so changes made by splice @ISA are respected by method calls) [perl #78400].

      splice は set-magic を呼び出すようになりました (それで splice @ISA はメソッド呼び出しに尊重されるように変更されました) [perl #78400]。

    • In-memory files created by open($fh, ">", \$buffer) were not calling FETCH/STORE at all [perl #43789] (5.12.2).

      open($fh, ">", \$buffer) によって作成されたインメモリファイルは FETCH/STORE を全く呼び出していませんでした [perl #43789] (5.12.2)。

    • utf8::is_utf8() now respects get-magic (like $1) (5.12.1).

      utf8::is_utf8() は ($1 と同様) get-magic を尊重します (5.12.1)。

  • Non-commutative binary operators used to swap their operands if the same tied scalar was used for both operands and returned a different value for each FETCH. For instance, if $t returned 2 the first time and 3 the second, then $t/$t would evaluate to 1.5. This has been fixed [perl #87708].

    交換可能でない 2 項演算子は、もし同じ tie されたスカラが両方の オペランドに使われていて、それぞれの FETCH で異なった値が返されると、 オペランドを交換していました。 例えば、もし $t が 1 回目は 2 を返し、2 回目に 3 を返していた場合、 $t/$t は 1.5 と評価していました。 これは修正されました [perl #87708]。

  • String eval now detects taintedness of overloaded or tied arguments [perl #75716].

    文字列の eval は、オーバーロードされたり tie された引数の汚染を 検出するようになりました [perl #75716]。

  • String eval and regular expression matches against objects with string overloading no longer cause memory corruption or crashes [perl #77084].

    文字列の eval と文字列をオーバーロードしているオブジェクトに対して マッチングしている正規表現は、もはやメモリ破壊やクラッシュを引き起こさなく なりました [perl #77084]。

  • readline now honors <> overloading on tied arguments.

    readline<> のオーバーロードや tie された引数に対応しました。

  • <expr> always respects overloading now if the expression is overloaded.

    <expr> は、式がオーバーロードされている場合は常にオーバーロードを 尊重するようになりました。

    Because "<> as glob" was parsed differently from "<> as filehandle" from 5.6 onwards, something like <$foo[0]> did not handle overloading, even if $foo[0] was an overloaded object. This was contrary to the documentation for overload, and meant that <> could not be used as a general overloaded iterator operator.

    "<> as glob" は 5.6 以降 "<> as filehandle" とは 異なったパースが行われるので、<$foo[0]> のようなものは、 たとえ $foo[0] がオーバーロードされたオブジェクトでも、 オーバーロードを扱えませんでした。 これは overload の文書に反しており、<> は一般的な オーバーロードされた反復子演算子として使えないことを意味していました。

  • The fallback behaviour of overloading on binary operators was asymmetric [perl #71286].

    2 項演算子でのオーバーロードのフォールバックの振る舞いは非対称でした [perl #71286]。

  • Magic applied to variables in the main package no longer affects other packages. See "Magic variables outside the main package" above [perl #76138].

    main パッケージの変数に適用されるマジックはもはや他のパッケージに 影響を与えなくなりました。 上述の "Magic variables outside the main package" を 参照してください [perl #76138]。

  • Sometimes magic (ties, taintedness, etc.) attached to variables could cause an object to last longer than it should, or cause a crash if a tied variable were freed from within a tie method. These have been fixed [perl #81230].

    時々、変数に付いているマジック (tie や汚染など) によって、 本来あるべきよりも長い間オブジェクトを存続させたり、tie 変数が tie メソッド内で解放された時にクラッシュを引き起こしたりしていました。 これらは修正されました [perl #81230]。

  • DESTROY methods of objects implementing ties are no longer able to crash by accessing the tied variable through a weak reference [perl #86328].

    tie を実装しているオブジェクトの DESTROY メソッドは、tie された変数に 弱い参照によってアクセスされてももはやクラッシュしなくなりました [perl #86328]。

  • Fixed a regression of kill() when a match variable is used for the process ID to kill [perl #75812].

    マッチングした変数が kill するプロセス ID に使われたときの kill() の 退行が修正されました [perl #75812]。

  • $AUTOLOAD used to remain tainted forever if it ever became tainted. Now it is correctly untainted if an autoloaded method is called and the method name was not tainted.

    $AUTOLOAD は、一度汚染されると、永遠に汚染されたままになっていました。 オーバーロードされたメソッドが呼び出され、そのメソッド名が汚染されていない 場合は、正しく汚染が除去されるようになりました。

  • sprintf now dies when passed a tainted scalar for the format. It did already die for arbitrary expressions, but not for simple scalars [perl #82250].

    sprintf は、フォーマットとして汚染されたスカラが渡されると die するように なりました。 すでに任意の式では die していましたが、単純なスカラでは die して いませんでした [perl #82250]。

  • lc, uc, lcfirst, and ucfirst no longer return untainted strings when the argument is tainted. This has been broken since perl 5.8.9 [perl #87336].

    lc, uc, lcfirst, ucfirst は、引数が汚染されているときに もはや汚染されていない文字列を返さなくなりました。 これは perl 5.8.9 から壊れていました [perl #87336]。

デバッガ

  • The Perl debugger now also works in taint mode [perl #76872].

    Perl デバッガは汚染モードでも動作するようになりました [perl #76872]。

  • Subroutine redefinition works once more in the debugger [perl #48332].

    サブルーチンの再定義は再びデバッガで動作するようになりました [perl #48332]。

  • When -d is used on the shebang (#!) line, the debugger now has access to the lines of the main program. In the past, this sometimes worked and sometimes did not, depending on the order in which things happened to be arranged in memory [perl #71806].

    シェバン(#!) 行で -d が使われたとき、デバッガはメインプログラムの 行にアクセスするようになりました。 以前は、これはメモリ配置の順番に依存して、動作したり動作しなかったり していました [perl #71806]。

  • A possible memory leak when using caller() to set @DB::args has been fixed (5.12.2).

    @DB::args を設定するのに caller() を 使ったときのメモリリークの可能性が修正されました (5.12.2)。

  • Perl no longer stomps on $DB::single, $DB::trace, and $DB::signal if these variables already have values when $^P is assigned to [perl #72422].

    $^P が代入されたとき、すでに $DB::single, $DB::trace, $DB::signal に値が入っている時には、値を変更しなくなりました [perl #72422]。

  • #line directives in string evals were not properly updating the arrays of lines of code (@{"_< ..."}) that the debugger (or any debugging or profiling module) uses. In threaded builds, they were not being updated at all. In non-threaded builds, the line number was ignored, so any change to the existing line number would cause the lines to be misnumbered [perl #79442].

    文字列 eval 中の #line 指示子は、デバッガ(あるいはデバッグや プロファイリング用のモジュール)が使っているコードの行の配列 (@{"_< ..."}) を正しく更新しsていませんでした。 スレッドビルドでは、これらは全く更新されていませんでした。 非スレッドビルドでは、行番号が無視されていたので、すでに存在している 行番号の変更では行番号の間違いを引き起こしていました [perl #79442]。

スレッド

  • Perl no longer accidentally clones lexicals in scope within active stack frames in the parent when creating a child thread [perl #73086].

    子スレッドを作るときに、親のアクティブなスタックフレーム内のスコープ内の レキシカルを間違ってクローン化しなくなりました [perl #73086]。

  • Several memory leaks in cloning and freeing threaded Perl interpreters have been fixed [perl #77352].

    スレッド化 Perl インタプリタのクローン化と解放でのいくつかの メモリリークが修正されました [perl #77352]。

  • Creating a new thread when directory handles were open used to cause a crash, because the handles were not cloned, but simply passed to the new thread, resulting in a double free.

    ディレクトリハンドルが開いているときに新しいスレッドを作成すると、 ハンドルはクローン化されずに単に新しいスレッドに渡されていたために、 二重解放が起こってクラッシュしていました。

    Now directory handles are cloned properly on Windows and on systems that have a fchdir function. On other systems, new threads simply do not inherit directory handles from their parent threads [perl #75154].

    Windows や fchdir 関数があるシステムではディレクトリハンドルは 正しくクローン化されるようになりました。 その他のシステムでは、新しいスレッドは単にディレクトリハンドルを 親スレッドから継承しなくなりました [perl #75154]。

  • The typeglob *,, which holds the scalar variable $, (output field separator), had the wrong reference count in child threads.

    The typeglob *,, which holds the scalar variable

    スカラ変数 $, (出力フィールドセパレータ) を保持している型グロブ *, は子スレッドで間違った参照カウントを持っていました。

  • [perl #78494] When pipes are shared between threads, the close function (and any implicit close, such as on thread exit) no longer blocks.

    [perl #78494] スレッド間でパイプが共有されたとき、close 関数 (およびスレッド終了時のような暗黙のクローズ) はブロックしなくなりました。

  • Perl now does a timely cleanup of SVs that are cloned into a new thread but then discovered to be orphaned (that is, their owners are not cloned). This eliminates several "scalars leaked" warnings when joining threads.

    Perl は、SV が新しいスレッドにクローン化されたけれども親がいなくなっている (つまり、この所有者はクローン化 されなかった) ことを発見した場合、 定期的に SV を掃除します。 これは、スレッドを結合したときのいくつかの "scalars leaked" 警告を 除去します。

スコープとサブルーチン

  • Lvalue subroutines are again able to return copy-on-write scalars. This had been broken since version 5.10.0 [perl #75656] (5.12.3).

    左辺値サブルーチンは再びコピーオンライトスカラを返せるようになりました。 これはバージョン 5.10.0 で壊れていました [perl #75656] (5.12.3)。

  • require no longer causes caller to return the wrong file name for the scope that called require and other scopes higher up that had the same file name [perl #68712].

    require は、呼び出された require のスコープと、より高いその他の スコープで同じファイル名があるときに、もはや caller が間違った ファイル名を返さなくなりました [perl #68712]。

  • sort with a ($$)-prototyped comparison routine used to cause the value of @_ to leak out of the sort. Taking a reference to @_ within the sorting routine could cause a crash [perl #72334].

    ($$) プロトタイプを持つ比較ルーチンを使う sort は、 @_ の値をソート処理外に漏らしていました。 ソートルーチン内で @_ のリファレンスを取ると、クラッシュを 引き起こしていました [perl #72334]。

  • Match variables (like $1) no longer persist between calls to a sort subroutine [perl #76026].

    ($1 のような) マッチング変数はソートサブルーチンの呼び出しの間で もはや持続しなくなりました [perl #76026]。

  • Iterating with foreach over an array returned by an lvalue sub now works [perl #23790].

    左辺値サブルーチンから返された配列に対する foreach による 反復が動作するようになりました [perl #23790]。

  • $@ is now localised during calls to binmode to prevent action at a distance [perl #78844].

    $@ は、離れたところでの行動を防ぐために、binmode の呼び出しの間は ローカル化されるようになりました [perl #78844]。

  • Calling a closure prototype (what is passed to an attribute handler for a closure) now results in a "Closure prototype called" error message instead of a crash [perl #68560].

    クロージャプロトタイプ(クロージャのために属性ハンドラに渡されるもの) を 呼び出すと、クラッシュせずに "Closure prototype called" エラーメッセージが 出力されるようになりました [perl #68560]。

  • Mentioning a read-only lexical variable from the enclosing scope in a string eval no longer causes the variable to become writable [perl #19135].

    文字列 eval 内のスコープから読み込み専用レキシカル変数に触れると、 変数が書き込み可能になっていました [perl #19135]。

シグナル

  • Within signal handlers, $! is now implicitly localized.

    シグナルハンドル内では、$! は暗黙にローカル化されるようになりました。

  • CHLD signals are no longer unblocked after a signal handler is called if they were blocked before by POSIX::sigprocmask [perl #82040].

    CHLD シグナルは、先に POSIX::sigprocmask によってブロックされていた 場合、シグナルハンドラの後でもはやブロック解除されなくなりました [perl #82040]。

  • A signal handler called within a signal handler could cause leaks or double-frees. Now fixed [perl #76248].

    シグナルハンドラ内でシグナルハンドルが呼び出されると、リークや二重解放を 引き起こしていました。 これは修正されました [perl #76248]。

さまざまなメモリリーク

  • Several memory leaks when loading XS modules were fixed (5.12.2).

    XS モジュールを読み込むときのいくつかのメモリリークが修正されました (5.12.2)。

  • substr(), pos(), keys(), and vec() could, when used in combination with lvalues, result in leaking the scalar value they operate on, and cause its destruction to happen too late. This has now been fixed.

    substr(), pos(), keys(), vec() は、左辺値と組み合わせて 使われたとき、操作したスカラ値をメモリリークし、デストラクタの実行が 遅すぎることになっていました。 これは修正されました。

  • The postincrement and postdecrement operators, ++ and --, used to cause leaks when used on references. This has now been fixed.

    ポストインクリメント演算子とポストデクリメント演算子(++--) は リファレンスに使われるとメモリリークを起こしていました。 これは修正されました。

  • Nested map and grep blocks no longer leak memory when processing large lists [perl #48004].

    ネストした mapgrep のブロックは、大きなリストを処理しても もはやメモリリークしなくなりました [perl #48004]。

  • use VERSION and no VERSION no longer leak memory [perl #78436] [perl #69050].

    use VERSIONno VERSION はもはやメモリリークしなくなりました [perl #78436] [perl #69050]。

  • .= followed by <> or readline would leak memory if $/ contained characters beyond the octet range and the scalar assigned to happened to be encoded as UTF8 internally [perl #72246].

    .= に引き続いて <>readline があると、 $/ に 8 進数の範囲を超えた文字が含まれていて、代入するスカラが 内部的に UTF8 でエンコーディングされている場合にメモリリークしていました [perl #72246]

  • eval 'BEGIN{die}' no longer leaks memory on non-threaded builds.

    eval 'BEGIN{die}' は非スレッド化ビルドでもメモリリークしなくなりました。

メモリ破壊とクラッシュ

  • glob() no longer crashes when %File::Glob:: is empty and CORE::GLOBAL::glob isn't present [perl #75464] (5.12.2).

    glob() は、%File::Glob:: が空で、CORE::GLOBAL::glob が 存在しないときでももはやクラッシュしなくなりました [perl #75464] (5.12.2)。

  • readline() has been fixed when interrupted by signals so it no longer returns the "same thing" as before or random memory.

    readline() は、シグナルで中断されなくなり、もはや以前と「同じもの」を返したり ランダムなメモリを返したりしなくなりました。

  • When assigning a list with duplicated keys to a hash, the assignment used to return garbage and/or freed values:

    複製されたキーを持つリストをハッシュに代入したとき、代入によって ゴミや解放された値を返していました:

        @a = %h = (list with some duplicate keys);

    This has now been fixed [perl #31865].

    これは修正されました [perl #31865]。

  • The mechanism for freeing objects in globs used to leave dangling pointers to freed SVs, meaning Perl users could see corrupted state during destruction.

    グロブでオブジェクトを解放する機構は解放した SV に繋がっていない ポインタを残したままにしていたので、デストラクタ中に壊れた状態を 見ることが可能でした。

    Perl now frees only the affected slots of the GV, rather than freeing the GV itself. This makes sure that there are no dangling refs or corrupted state during destruction.

    Perl は GV 自身を解放するのではなく、 GV で影響のあるスロットのみを 解放するようになりました。 これにより、デストラクタ中に繋がっていない参照や壊れた状態が 見えないようになりました。

  • The interpreter no longer crashes when freeing deeply-nested arrays of arrays. Hashes have not been fixed yet [perl #44225].

    インタプリタは、深くネストした配列の配列の解放したときにもはや クラッシュしなくなりました。 ハッシュはまだ修正されていません [perl #44225]。

  • Concatenating long strings under use encoding no longer causes Perl to crash [perl #78674].

    use encoding の基で長い文字列を結合してもクラッシュしなくなりました [perl #78674]。

  • Calling ->import on a class lacking an import method could corrupt the stack, resulting in strange behaviour. For instance,

    import メソッドのないクラスの ->import 呼び出しでスタックが壊れ、 おかしな振る舞いを見せていました。 例えば、

      push @a, "foo", $b = bar->import;

    would assign "foo" to $b [perl #63790].

    これは "foo" を $b に代入していました [perl #63790]。

  • The recv function could crash when called with the MSG_TRUNC flag [perl #75082].

    recv 関数は、MSG_TRUNC フラグ付きで呼び出されたときに クラッシュすることがありました [perl #75082]。

  • formline no longer crashes when passed a tainted format picture. It also taints $^A now if its arguments are tainted [perl #79138].

    formline は汚染されたフォーマットピクチャーを渡されたときに、もはや クラッシュしなくなりました。 また、引数が汚染されているときには $^A も汚染されるようになりました [perl #79138]。

  • A bug in how we process filetest operations could cause a segfault. Filetests don't always expect an op on the stack, so we now use TOPs only if we're sure that we're not stating the _ filehandle. This is indicated by OPf_KIDS (as checked in ck_ftst) [perl #74542] (5.12.1).

    ファイルテスト操作の処理でのバグによりセグメンテーションフォールトが 起きていました。 ファイルテストは常に op がスタック上にあることを想定しないので、 _ ファイルハンドルを stat したのではないことが分かっているときにだけ TOP を使うようになりました。 これは (ck_ftst でチェックされる) OPf_KIDS によって示されます [perl #74542] (5.12.1)。

  • unpack() now handles scalar context correctly for %32H and %32u, fixing a potential crash. split() would crash because the third item on the stack wasn't the regular expression it expected. unpack("%2H", ...) would return both the unpacked result and the checksum on the stack, as would unpack("%2u", ...) [perl #73814] (5.12.2).

    unpack() は、スカラコンテキストでの %32H%32u がクラッシュする 可能性がある問題が修正され、正しく扱えるようになりました。 split() は、スタック上の 3 番目のアイテムが想定している正規表現では ないことによってクラッシュしていました。 unpack("%2H", ...)unpack("%2u", ...) のように、unpack された 結果とスタック上のチェックサムの両方を返していました [perl #73814] (5.12.2)。

様々な Perl 演算子への修正

  • The &, |, and ^ bitwise operators no longer coerce read-only arguments [perl #20661].

    &, |, ^ ビット単位演算子は読み込み専用引数を強制しなくなりました [perl #20661]。

  • Stringifying a scalar containing "-0.0" no longer has the effect of turning false into true [perl #45133].

    "-0.0" を含むスカラの文字列化は、もはや偽を真に変える効果を 持たなくなりました [perl #45133]。

  • Some numeric operators were converting integers to floating point, resulting in loss of precision on 64-bit platforms [perl #77456].

    一部の数値演算子は整数を浮動小数点数に変換して、結果として 64-ビット プラットフォームでは精度が落ちていました [perl #77456]。

  • sprintf() was ignoring locales when called with constant arguments [perl #78632].

    sprintf() は、定数引数で呼び出されるとロケールを無視していました [perl #78632]。

  • Combining the vector (%v) flag and dynamic precision would cause sprintf to confuse the order of its arguments, making it treat the string as the precision and vice-versa [perl #83194].

    sprintf で ベクトル (%v) フラグと動的精度を結合すると、引数の順序を 混乱して、文字列を精度として扱ったりその逆になったりしていました [perl #83194]。

C API に関連するバグ

  • The C-level lex_stuff_pvn function would sometimes cause a spurious syntax error on the last line of the file if it lacked a final semicolon [perl #74006] (5.12.1).

    C-レベルの lex_stuff_pvn 関数は、最後のセミコロンがない場合、時々 ファイルの最後の行で間違った文法エラーを出すことがありました [perl #74006] (5.12.1)。

  • The eval_sv and eval_pv C functions now set $@ correctly when there is a syntax error and no G_KEEPERR flag, and never set it if the G_KEEPERR flag is present [perl #3719].

    eval_sveval_pv の C 関数は、文法エラーがあって G_KEEPERR フラグがないときに $@ を正しく設定するようになり、 G_KEEPERR フラグがあるときには設定しなくなりました [perl #3719]。

  • The XS multicall API no longer causes subroutines to lose reference counts if called via the multicall interface from within those very subroutines. This affects modules like List::Util. Calling one of its functions with an active subroutine as the first argument could cause a crash [perl #78070].

    XS マルチコール API は、サブルーチン内からマルチコールインターフェースで 呼び出されたときにサブルーチンの参照カウントを失っていました。 これは List::Util のようなモジュールに影響していました。 最初の引数としてアクティブなサブルーチンを指定してこれらの関数を 呼び出すとクラッシュを引き起こしていました [perl #78070]。

  • The SvPVbyte function available to XS modules now calls magic before downgrading the SV, to avoid warnings about wide characters [perl #72398].

    XS モジュールで利用可能な SvPVbyte は、ワイド文字に関する 警告を避けるために、SV が降格する前にマジックを呼び出すようになりました [perl #72398]。

  • The ref types in the typemap for XS bindings now support magical variables [perl #72684].

    XS バインディングのための typemap の ref 型はマジカル変数に 対応しました [perl #72684]。

  • sv_catsv_flags no longer calls mg_get on its second argument (the source string) if the flags passed to it do not include SV_GMAGIC. So it now matches the documentation.

    sv_catsv_flags が、渡されたフラグに SV_GMAGIC が含まれていない ときには 2 番目の引数 (ソース文字列) に mg_get 呼び出さなくなりました。 これで文書と一致します。

  • my_strftime no longer leaks memory. This fixes a memory leak in POSIX::strftime [perl #73520].

    my_strftime はもはやメモリリークしなくなりました。 この修正は POSIX::strftime のメモリリークを修正します [perl #73520]。

  • XSUB.h now correctly redefines fgets under PERL_IMPLICIT_SYS [perl #55049] (5.12.1).

    XSUB.h は PERL_IMPLICIT_SYS のときに正しく fgets を再定義するように なりました [perl #55049] (5.12.1)。

  • XS code using fputc() or fputs() on Windows could cause an error due to their arguments being swapped [perl #72704] (5.12.1).

    Windows で fputc() あるいは fputs() を使った XS コードは、引数が 入れ替わることによりエラーを引き起こすことがありました [perl #72704] (5.12.1)。

  • A possible segfault in the T_PTROBJ default typemap has been fixed (5.12.2).

    デフォルト typemap T_PTROBJ でセグメンテンションフォールトが 起きる可能性があった問題が修正されました (5.12.2)。

  • A bug that could cause "Unknown error" messages when call_sv(code, G_EVAL) is called from an XS destructor has been fixed (5.12.2).

    XS のデストラクタから "call_sv(code, G_EVAL)" が呼び出されたときに "Unknown error" が起きることがあるバグが修正されました (5.12.2)。

既知の問題

This is a list of significant unresolved issues which are regressions from earlier versions of Perl or which affect widely-used CPAN modules.

これは、以前のバージョンの Perl からの退行や、広く使われている CPAN モジュールに影響する、重要な未解決問題の一覧です。

  • List::Util::first misbehaves in the presence of a lexical $_ (typically introduced by my $_ or implicitly by given). The variable that gets set for each iteration is the package variable $_, not the lexical $_.

    List::Util::first は、レキシカルな $_ (典型的には my $_ や、 暗黙に given によって起こります) があると間違った振る舞いをします。 それぞれの反復のために準備している変数はパッケージ変数の $_ であって、 レキシカルな $_ ではありません。

    A similar issue may occur in other modules that provide functions which take a block as their first argument, like

    同様な問題は、以下のように、ブロックを最初の引数に取る関数を提供している その他のモジュールにも起こります。

        foo { ... $_ ...} list

    http://rt.perl.org/rt3/Public/Bug/Display.html?id=67694 も 参照してください。

  • readline() returns an empty string instead of undef when it is interrupted by a signal.

    readline() がシグナルで中断したとき、undef ではなく空文字列を返します。

  • The changes in prototype handling break Switch. A patch has been sent upstream and will hopefully appear on CPAN soon.

    プロトタイプの扱いの変更は Switch を壊します。 パッチはすでに上流に送信されていて、うまくいけばもうすぐ CPAN に 現れるでしょう。

  • The upgrade to ExtUtils-MakeMaker-6.57_05 has caused some tests in the Module-Install distribution on CPAN to fail. (Specifically, 02_mymeta.t tests 5 and 21; 18_all_from.t tests 6 and 15; 19_authors.t tests 5, 13, 21, and 29; and 20_authors_with_special_characters.t tests 6, 15, and 23 in version 1.00 of that distribution now fail.)

    ExtUtils-MakeMaker-6.57_05 への更新により、CPAN の Module-Install 配布の いくつかのテストが失敗するようになりました。 (具体的には、バージョン 1.00 では 02_mymeta.t テスト 5 と 21; 18_all_from.t テスト 6 と 15; 19_authors.t テスト 5, 13, 21, 29; 20_authors_with_special_characters.t テスト 6, 15, 23 が失敗します。)

  • On VMS, Time::HiRes tests will fail due to a bug in the CRTL's implementation of setitimer: previous timer values would be cleared if a timer expired but not if the timer was reset before expiring. HP OpenVMS Engineering have corrected the problem and will release a patch in due course (Quix case # QXCM1001115136).

    VMS では、Time::HiRes のテストは CRTL の setitimer 実装のバグにより 失敗していました: 以前は、タイマーの値は時間切れになると クリアされていましたが、もしタイマーが時間切れになる前にリセットされると クリアされませんでした。 HP OpenVMS Engineering はこの問題を修正し、後日パッチをリリースします (Quix case # QXCM1001115136)。

  • On VMS, there were a handful of Module::Build test failures we didn't get to before the release; please watch CPAN for updates.

    VMS では、以前は成功していた Module::Build のテストの一部が 失敗するようになっています; CPAN の更新を見守ってください。

正誤表

keys(), values(), each() は配列でも動作します

You can now use the keys(), values(), and each() builtins on arrays; previously you could use them only on hashes. See perlfunc for details. This is actually a change introduced in perl 5.12.0, but it was missed from that release's perl5120delta.

keys(), values(), each() 組み込み関数を配列に対しても使えるように なりました(以前はハッシュに対してしか使えませんでした)。 詳しくは perlfunc を参照してください。 これは実際には perl 5.12.0 で導入されましたが、このリリースの perl5120delta から漏れていました。

split() and @_

(split() と @_)

split() no longer modifies @_ when called in scalar or void context. In void context it now produces a "Useless use of split" warning. This was also a perl 5.12.0 change that missed the perldelta.

split() はスカラコンテキストや無効コンテキストで呼び出されたときに @_ を変更されなくなりました。 無効コンテキストでは "Useless use of split" 警告が出ます。 これは perl 5.12.0 でも変更されていましたが、perldelta から漏れていました。

追悼

Randy Kobes, creator of http://kobesearch.cpan.org/ and contributor/maintainer to several core Perl toolchain modules, passed away on September 18, 2010 after a battle with lung cancer. The community was richer for his involvement. He will be missed.

http://kobesearch.cpan.org/ の作者であり、いくつかのコア Perl ツールチェーンモジュールの貢献者/メンテナである Randy Kobes は肺がんとの闘病の末に 2010 年 9 月 18 日に亡くなりました。 コミュニティは彼の関与によってより豊かになりました。 Perl コミュニティへの彼の貢献は忘れません。 彼は残念なことでした。

Acknowledgements

Perl 5.14.0 represents one year of development since Perl 5.12.0 and contains nearly 550,000 lines of changes across nearly 3,000 files from 150 authors and committers.

Perl 5.14.0 は、Perl 5.12.0 以降、150 人の作者とコミッタによって、 約 3,000 のファイルに 550,000 行以上の変更を加えて、 ほぼ 1 年間開発されてきました。

Perl continues to flourish into its third decade thanks to a vibrant community of users and developers. The following people are known to have contributed the improvements that became Perl 5.14.0:

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

Aaron Crane, Abhijit Menon-Sen, Abigail, Ævar Arnfjörð Bjarmason, Alastair Douglas, Alexander Alekseev, Alexander Hartmaier, Alexandr Ciornii, Alex Davies, Alex Vandiver, Ali Polatel, Allen Smith, Andreas König, Andrew Rodland, Andy Armstrong, Andy Dougherty, Aristotle Pagaltzis, Arkturuz, Arvan, A. Sinan Unur, Ben Morrow, Bo Lindbergh, Boris Ratner, Brad Gilbert, Bram, brian d foy, Brian Phillips, Casey West, Charles Bailey, Chas. Owens, Chip Salzenberg, Chris 'BinGOs' Williams, chromatic, Craig A. Berry, Curtis Jewell, Dagfinn Ilmari Mannsåker, Dan Dascalescu, Dave Rolsky, David Caldwell, David Cantrell, David Golden, David Leadbeater, David Mitchell, David Wheeler, Eric Brine, Father Chrysostomos, Fingle Nark, Florian Ragwitz, Frank Wiegand, Franz Fasching, Gene Sullivan, George Greer, Gerard Goossen, Gisle Aas, Goro Fuji, Grant McLean, gregor herrmann, H.Merijn Brand, Hongwen Qiu, Hugo van der Sanden, Ian Goodacre, James E Keenan, James Mastros, Jan Dubois, Jay Hannah, Jerry D. Hedden, Jesse Vincent, Jim Cromie, Jirka Hruška, John Peacock, Joshua ben Jore, Joshua Pritikin, Karl Williamson, Kevin Ryde, kmx, Lars Dɪᴇᴄᴋᴏᴡ 迪拉斯, Larwan Berke, Leon Brocard, Leon Timmermans, Lubomir Rintel, Lukas Mai, Maik Hentsche, Marty Pauley, Marvin Humphrey, Matt Johnson, Matt S Trout, Max Maischein, Michael Breen, Michael Fig, Michael G Schwern, Michael Parker, Michael Stevens, Michael Witten, Mike Kelly, Moritz Lenz, Nicholas Clark, Nick Cleaton, Nick Johnston, Nicolas Kaiser, Niko Tyni, Noirin Shirley, Nuno Carvalho, Paul Evans, Paul Green, Paul Johnson, Paul Marquess, Peter J. Holzer, Peter John Acklam, Peter Martini, Philippe Bruhat (BooK), Piotr Fusik, Rafael Garcia-Suarez, Rainer Tammer, Reini Urban, Renee Baecker, Ricardo Signes, Richard Möhn, Richard Soderberg, Rob Hoelz, Robin Barker, Ruslan Zakirov, Salvador Fandiño, Salvador Ortiz Garcia, Shlomi Fish, Sinan Unur, Sisyphus, Slaven Rezic, Steffen Müller, Steve Hay, Steven Schubiger, Steve Peters, Sullivan Beck, Tatsuhiko Miyagawa, Tim Bunce, Todd Rinaldo, Tom Christiansen, Tom Hukins, Tony Cook, Tye McQueen, Vadim Konovalov, Vernon Lyon, Vincent Pit, Walt Mankowski, Wolfram Humann, Yves Orton, Zefram, and Zsbán Ambrus.

This is woefully incomplete as it's automatically generated from version control history. In particular, it doesn't include the names of the (very much appreciated) contributors who reported issues in previous versions of Perl that helped make Perl 5.14.0 better. For a more complete list of all of Perl's historical contributors, please see the AUTHORS file in the Perl 5.14.0 distribution.

これはバージョンコントロール履歴から自動的に生成しているので、 悲惨なほどに不完全です。 特に、Perl 5.14.0 をよりよくするための助けとなった、以前のバージョンの Perl の問題を報告してくれた(とてもありがたい)貢献者の名前を含んでいません。 全ての Perl の歴史的な貢献者のより完全な一覧はについては、 どうか Perl 5.14.0 配布に含まれている AUTHORS を参照してください。

Many of the changes included in this version originated in the CPAN modules included in Perl's core. We're grateful to the entire CPAN community for helping Perl to flourish.

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

バグ報告

If you find what you think is a bug, you might check the articles recently posted to the comp.lang.perl.misc newsgroup and the Perl bug database at http://rt.perl.org/perlbug/ . There may also be information at http://www.perl.org/ , the Perl Home Page.

もしバグと思われるものを見つけたら、comp.lang.perl.misc ニュースグループに 最近投稿された記事や http://rt.perl.org/perlbug/ にある Perl バグ データベースを確認してください。 Perl ホームページ、http://www.perl.org にも情報があります。

If you believe you have an unreported bug, please run the perlbug program included with your release. Be sure to trim your bug down to a tiny but sufficient test case. Your bug report, along with the output of perl -V, will be sent off to [email protected] to be analysed by the Perl porting team.

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

If the bug you are reporting has security implications, which make it inappropriate to send to a publicly archived mailing list, then please send it to [email protected]. This points to a closed subscription unarchived mailing list, which includes all the core committers, who be able to help assess the impact of issues, figure out a resolution, and help co-ordinate the release of patches to mitigate or fix the problem across all platforms on which Perl is supported. Please use this address for security issues in the Perl core only, not for modules independently distributed on CPAN.

もし報告しようとしているバグがセキュリティに関するもので、公開されている メーリングリストに送るのが不適切なものなら、 [email protected] に送ってください。 このアドレスは、問題の影響を評価し、解決法を見つけ、Perl が対応している 全てのプラットフォームで問題を軽減または解決するパッチをリリースするのを 助けることが出来る、全てのコアコミッタが参加している非公開の メーリングリストになっています。 このアドレスは、独自に CPAN で配布されているモジュールではなく、 Perl コアのセキュリティ問題だけに使ってください。

SEE ALSO

The Changes file for an explanation of how to view exhaustive details on what changed.

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

The INSTALL file for how to build Perl.

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

The README file for general stuff.

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

The Artistic and Copying files for copyright information.

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