NAME

perl5120delta - perl v5.12.0 での変更点

DESCRIPTION

このドキュメントは 5.10.0 リリースと 5.12.0 リリースの変更点を記述しています。

5.12.0 でのバグ修正の多くは既に 5.10.1 メンテナンスリリースに含まれています。

これらの変更の一覧は 5.10.1 リリースノート (perl5101delta) で 見られます。

コアの拡張

新しい package NAME VERSION 文法

名前空間が 'package' で宣言されるとき、モジュール作者が名前空間の $VERSION をセットするための新しい文法が使えるようになりました。 これによって、for our $VERSION = ... や似たような構造を取り除けます。 例えば、

      package Foo::Bar 1.23;
      # $Foo::Bar::VERSION == 1.23

これにはいくつかの利点があります:

これは package NAME とだけ書いてある古いコードは壊しませんが、 package NAME VERSION を使っているコードは perl 5.12.0 以降では制限される 必要があります。 これは open の 2 引数から 3 引数への変更に似ています。 最新の Perl が必要なユーザーには利益があり、おそらく数年後には 標準的なプラクティスになっているでしょう。

しかし、package NAME VERSION は新しい「厳密な」バージョン番号形式を 必要とします。 詳細については "Version number formats" を参照してください。

... 演算子

ヤダヤダ演算子というあだ名のある新しい演算子 ... が追加されました。 これはまだ実装していないコードのプレースホルダとしてマークすることを 目的としています。 "Yada Yada Operator" in perlop を参照してください。

暗黙の strict

バージョン番号 5.11.0 以上を指定した use VERSION 文法を使うと、 (その他の機能が有効化されるのに追加して) ちょうど use strict と同様、レキシカルに strict が有効になります。 以下の表記は:

    use 5.12.0;

以下を意味します:

    use strict;
    use feature ':5.12';

Unicode の改良

Perl 5.12 は、リリース時点での最新版である Unicode 5.2 を同梱しています。 この版の Unicode は 2009 年 10 月にリリースされました。 この版の標準で変更されたものに関するさらなる詳細については http://www.unicode.org/versions/Unicode5.2.0 を参照してください。 他の版の Unicode をインストールして使うための方法については perlunicode を参照してください。

さらに、Perl の開発者は Perl の Unicode 実装を大きく改善しました。 完全な詳細については、後述する "Unicode overhaul" を参照してください。

2038 年問題準拠

Perl コアの時刻関係の関数は 2038年問題準拠になりました。 (これはあなたにとっては余り意味のないことかもしれませんが、 あなたの子供はこれを喜ぶでしょう!)

qr のオーバーロード

qr// operator 演算子をオーバーロードできるようになりました; これは正規表現への変換で、既に可能であった真偽値、文字列、数値の オブジェクトへの変換と似たものです。 これは、オブジェクトが =~ 演算子の右側に現れたときか、 正規表現への変数展開が行われるときに起動します。 overload を参照してください。

プラグ可能なキーワード

エクステンションモジュールは、キーワードが頭についた表現と複合文の 新種を定義するために、Perl のパーサーにきれいにフックを設定できます。 キーワードに引き続く文法は完全にエクステンションによって定義されます。 これにより、インラインでパースでき、正しい ops をきれいに生成できる、 完全に Perl とは違う副言語が可能になります。

仕組みについては "PL_keyword_plugin" in perlapi を参照してください。 Perl コアソース配布には、プラグ可能なキーワードを使って逆ポーランド記法を 実装した XS::APItest::KeywordRPN という新しいモジュールも含んでいます。 このモジュールは主にテスト用に使われ、通常はインストールされませんが、 この仕組みの使い方の例となっています。

Perl の開発者はこの機能は実験的なものだと考えています。 Perl 5.14 では過去互換性の点から削除したり変更したりするかもしれません。

さらに内部のための API

字句解析の最下位層とパッドシステムの一部が XS エクステンションから 利用可能な C API を持つようになりました。 これらはプラグ可能なキーワードの適切な使用を助けるために必要ですが、 他の使い方もあります。 新しい API は実験的で、これらの分野のコアの能力の利点を完全に 利用するために必要なもののうち小さな部分しか対応していません。 Perl 5.13 開発サイクルでクリーンで対応したインターフェースを完全に 追加することを目的としています。

Perl の開発者はこの機能は実験的なものだと考えています。 Perl 5.14 では過去互換性の点から削除したり変更したりするかもしれません。

オーバーライド可能な関数検索

エクステンションモジュールがサブルーチン検索処理を修正するために rv2cv op の作成をフックした場合、 これは裸のサブルーチン呼び出しでも正しく動作するようになりました。 これは、この方法で参照されたサブルーチンのプロトタイプが正しく 処理されることを意味します。 (以前は、裸のサブルーチン名はフックできない機構を使ってパースのために 最初に検索されていたので、エクステンションは & がついている サブルーチン名しか適切に影響を与えられませんでした。)

プラグ可能なメソッド解決順序のための適切なインターフェース

Perl 5.10.1 から、デフォルト (線形深さ優先検索) 以外のメソッド解決順序を 追加して使うための新しいインターフェースがあります。 5.10.0 で追加された C3 メソッド解決順序は、Perl 空間でのインターフェースの 変更なしにプラグインとして再実装されました。 さらなる情報については perlmroapi を参照してください。

実験的な正規表現エスケープ \N

\n の逆と考えられる新しい正規表現エスケープである \N に 対応しました。 これは、単一行マッチング修飾子 /s のあるなしに関わらず、 改行以外の任意の文字にマッチングします。 これは文字クラスの中では使えません。 \N{3} は改行でない 3 文字にマッチングします; \N{5,} は少なくとも 5 文字にマッチングします。 \N{NAME} は未だ NAME という名前の文字またはシーケンスを意味しますが、 NAME として 35, といったものは使えなくなりました。

これは、文字名として数値も許していた カスタム文字名変換器 を壊します; なぜなら \N{3} は三つの非改行文字にマッチングし、3 という名前の 文字ではなくなるからです。 (Unicode 標準で定義されている名前には数字はありません; カスタム変換器のみが影響を受けます。)

Perl の開発者は、ユーザーが、その Unicode 名の文字とマッチングする 既存の \N{...} 構造と混乱することを懸念しています。 従って、この機能は実験的なものです。 Perl 5.14 では過去互換性の点から削除したり変更したりするかもしれません。

DTrace 対応

DTrace へのいくらかの対応が追加されました。 INSTALL の "DTrace support" を参照してください。

CPAN モジュールメタデータの configure_requires への対応

CPANCPANPLUS は、ほとんどの最近の CPAN 配布が含んでいる メタデータファイル META.ymlconfigure_requires キーワードに 対応しました。 これにより、Makefile.PLBuild.PL が実行される前に インストールされていなければならない設定の事前条件を指定できます。

CPAN で配布するときに configure_requires を指定する方法については ExtUtils::MakeMakerModule::Build の文書を参照してください。

each がより柔軟に

each 関数は配列を操作できるようになりました。

文修飾子としての when

when は文修飾子として使えるようになりました。

$, の柔軟性

$, 変数を tie できるようになりました。

when 句での //

// は when 句では || のように振る舞うようになりました。

シェル環境から警告を有効にする

PERL5OPT 環境変数で -W をセットできるようになりました。

delete local

delete local でハッシュエントリをローカルに削除できるようになりました。

抽象名前空間ソケットへの対応

抽象名前空間ソケットは、AF_UNIX ファミリーにある Linux 固有のソケット型で、 任意の文字配列をアドレスとして使えるようにやや悪用されています: これは NUL バイトから始まって、NUL バイトでは終わりませんが、 socket() システムコールで渡される長さがあります。

substr の引数の 32 ビット制限は取り除かれました

substr の引数の 32 ビット制限は取り除かれました。 pos 引数と len 引数として、 システムの符号付き整数および符号なし整数の幅全てを指定可能です。

互換性がなくなる可能性のある変更

デフォルトでの非推奨の警告

長年をかけて、Perl の開発者は多くの言語機能を様々な理由で非推奨に してきました。 Perl は、非推奨の言語機能が使われると警告を出すのがデフォルトになりました。 Perl が警告するようになった非推奨の多くは何年間も非推奨となっています。 Perl のあるリリースで何が非推奨かの一覧はそのリリースの perl5xxdelta.pod ファイルにあります。

レキシカルスコープでこの機能を無効にするには、 no warnings 'deprecated'; を使ってください。 どの言語機能が非推奨であるかと、様々な非推奨警告の説明については、 perldiag を参照してください。 Perl の開発者がこのリリースで非推奨とした機能とモジュールの一覧は 以下の "Deprecations" を参照してください。

バージョン番号形式

受け付けられるバージョン番号形式は、「厳密な」形式と「曖昧な」形式で 形式化されました。 package NAME VERSION は厳密なバージョン番号を取ります。 UNIVERSAL::VERSIONversion オブジェクトコンストラクタは 曖昧なバージョン番号を取ります。 バージョンが不正な場合、致命的エラーになります。 use NAME VERSION のバージョン引数はまず数値リテラルかv-文字列として パースされ、それから UNIVERSAL::VERSION に渡されます (そして「曖昧な」形式テストを通過する必要があります)。

これらの形式は version に完全に文書化されています。 最初の仮定として「厳密な」バージョン番号は指数部のない正の 10 進数 (整数か 10 進小数) か、あるいは先頭に 'v' の文字がついたドット付き 10 進数整数v-文字列で、少なくとも3 要素があるものです。 「曖昧な」バージョン番号は、要素数が 2 以下であったり、先頭に 'v' が ないものも許します。 「曖昧な」規則の下では、10 進数とドット付き 10 進数のバージョンは、 小数かドット付き要素の後に下線で区切られた「英字」要素を 付けることができます。

version モジュールには、スカラがこれらの形式に従っているかを チェックするための version::is_strict 関数と version::is_lax 関数が 追加されました。

@INC の再構成

@INC の中で、ARCHLIBPRIVLIB は現在のバージョンの site_perl および vendor_perl の後に現れるようになりました。 site_perlvendor_perl にインストールされたモジュールは、 ARCHLIBPRIVLIB にインストールされたものより優先して 読み込まれます。

REGEXP は第一級になりました

内部では、Perl は(qr// で作成されたような)コンパイルされた正規表現を を第一級実体として扱います。 Perl の内部データ構造を直列化、非直列化するなどの深い相互作用を 行うモジュールは、この変更に対応するために更新する必要があります。 影響の受ける CPAN モジュールのほとんどは、これを書いている時点で 既に更新されています。

switch 文の変更

given/when の switch 文は、Perl 5.10.0 で扱えたものよりも もっと複雑な文を扱えるようになりました (これらの拡張は 5.10.1 および引き続く 5.10 リリースでも利用可能です。) 新しく、when がスマートマッチングの式ではなく真偽値として 引数を解釈する場合が二つあります。

フリップフロップ演算子

..... のフリップフロップ演算子は、通常の文法に従ってブール値 コンテキストで評価されるようになりました。 "Range Operators" in perlop を参照してください。

perl 5.10.0 では、when (1..10) としても、与えられた値が 1 から 10 の間の 数値かどうかをテストするようには動作しないことに注意してください; 代わりに when ([1..10]) を使うべきです (配列リファレンスに 注意してください)。

しかし、5.10.0 とは反対に、when() でブール値コンテキストで フリップフロップ演算子が評価されることが保証されることで、 特に以下のように双安定条件を実装するときに便利です:

    when (/^=begin/ .. /^=end/) {
      # do something
    }
定義性和 (defined-or) 演算子

when (expr1 // expr2) のような、定義性和 (defined-or) を含む複合式は、 最初の式が真偽値なら真偽値として扱われます。 (これは単に、when (expr1 || expr2) のような通常の or 演算子に 適用されるすでにあるルールの拡張です。

スマートマッチングの変更

Perl 5.10.0 から、Perl の開発者はスマートマッチング演算子に多くの変更を 行いました。 これらは、当然ながら暗黙にスマートマッチングを使っている switch 文の 振る舞いも変えます。 これらの変更は 5.10.1 にも適用され、引き続く 5.10 リリースにも残る予定です。

型ベースの発行(dispatch)への変更

スマートマッチング演算子 ~~ はもはや可換性を持ちません。 スマートマッチングの振る舞いは、まず右側の引数の型に依存します。 さらに、その文法は一貫性と有用性をより高めるために調整されました。 一般的な後方互換性は維持されている一方、いくつかの変更点には 注意しなければなりません:

スマートマッチング演算子に関する完全な発行テーブルは "Smart matching in detail" in perlsyn にあります。

スマートマッチングとオーバーロード

一番右の引数の型に依存するという発行ルールによれば、 演算子の右側にオブジェクトのオーバーロード ~~ が現れたとき、 オーバーロードルーチンは(3 番目の引数に真の値を設定して; overload を 参照してください) 常に呼び出されます。 しかし、オブジェクトが左側に現れたとき、オーバーロードルーチンは 一番右の引数が単純なスカラの場合にのみ呼び出されます。 これによって配列に対するスマートマッチングの分配性や 複合型(コードリファレンス、ハッシュ、正規表現)に対するその他の振る舞いは 壊れません。 従って、スマートマッチングのためのローバーロードルーチンの作者は ほとんどの場合、スカラの比較と、可能性があるなら文字列化のオーバーロードに 関してのみ心配する必要があります; その他の一般的な場合は 一貫性を持って自動的に扱われます。

~~ は、オーバーロードしていないオブジェクトに対して動作しなくなりました (オブジェクトの基礎となる構造に依存することを避けるためです)。 しかし、オブジェクトが文字列化か数値化演算子をオーバーロードしていて、 オーバーロードのフォールバックが有効の場合は、通常通りに使われます。)

その他の互換性のなくなる可能性のある変更

非推奨

時々、Perl の開発者は、以前コア配布の一部として出荷した機能やモジュールを 非推奨とする必要があることに気付きます。 私たちは、Perl に過去互換性のない変更をすることで Perl のソフトウェアを ビルドしたり保守したりする開発者に引き起こす苦痛といらだちについて よくわかっています。 私たちがある機能や文法を非推奨にしたとき、それは簡単な 選択ではなかったということは間違いありません。 時には、ある機能や文法が、設計や実装がまずいことを発見して非推奨に することを選択します。 時には、他の機能に差し支えたり、性能上の問題を引き起こすのが理由です。 時には、理由はもっと複雑です。 可能であるなら、私たちは少なくとも 1 メジャーリリースの間 非推奨の機能を以前の形で開発者に利用可能なままにしています。 非推奨の機能が Perl を管理・拡張する私たちの能力を大きく 混乱させないうちは、私たちは機能を出来るだけ長くそのままにしようと しています。

以下のものは非推奨となりました:

suidperl

suidperl はもはや Perl の一部ではありません。 これは setuid 許可ビットを正しく扱えないシステムで、これを エミュレートする機構を提供していました。

Use of := to mean an empty attribute list

事故により、Perl のパーサーは以下の構造が全て等価になってしまっていました:

    my $pi := 4;
    my $pi : = 4;
    my $pi :  = 4;

: は、= で終わるまでの属性として扱われました。 ここでは空白は意味を持たないので、全ては空属性リストとしてパースされ、 従って上記は全て等価となるので、以下のように書いた方がよいです

    my $pi = 4;

なぜなら空リストには属性処理は行われないからです。

今のままでは、これは、既にあるコードの意味を暗黙に変更しなければ、 := を新しいトークンとして使えないことを意味します。 従って、特定の形式は非推奨となり、将来文法エラーとなる予定です。 (例えば、コードジェネレータによって)本当に空属性リストが必要な場合は、 = の前に空白を追加することによって警告を回避してください。

UNIVERSAL->import()

UNIVERSAL->import() メソッドは非推奨となりました。 インポート引数を use UNIVERSAL 文に渡そうとすると非推奨警告が出ます。

Use of "goto" to jump into a construct

goto を外側のスコープから内側のスコープへジャンプするために使うのは 非推奨となりました。 この希なユースケースはスコープの実装に問題を引き起こします。

Custom character names in \N{name} that don't look like names

\N{name} において、name は何でも構いません。 標準の Unicode 名はとても制限された範囲になっていますが、 カスタム名変換器は、例えば、句読点だけからなるシンボルを作ることができます。 英字で始まらない名前や、英数字とその他の数文字(空白、ダッシュ、かっこ、 コロン)以外の文字を含む名前は非推奨となりました。 \N の意味が追加された("\N experimental regex escape" を 参照してください)ので、中かっこでくくられた量指定子のように見える 名前は動作しません。 例えば、\N{3,4} は 3 から 4 文字の非改行文字にマッチングします; 以前はカスタム名 3,4 が作成されていました。

非推奨モジュール

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

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

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

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

Class::ISA
Pod::Plainer
Shell
Switch

Switch はバグが多いので避けるべきです。 Perl の新しい given/when 機能が適切な代替品です。 さらなる情報については "Switch statements" in perlsyn を 参照してください。

$[ への代入
サブルーチンへの :locked 属性の使用
attributes プラグマでの "locked" の使用
attributes プラグマでの "unique" の使用
Perl_pmflag

Perl_pmflag はもはや Perl の公開 API ではありません。 これを呼び出すと非推奨警告が生成され、これは将来のリリースで 取り除かれます。 API の一覧には載っていましたが、文書化されたことはなく、 toke.c と、5.10 以前での regcomp.c でのみ使われていました。 コアでは、これは static 版に置き換えられました。

大量の Perl 4 時代のライブラリ

termcap.pl, tainted.pl, stat.pl, shellwords.pl, pwd.pl, open3.pl, open2.pl, newgetopt.pl, look.pl, find.pl, finddepth.pl, importenv.pl, hostname.pl, getopts.pl, getopt.pl, getcwd.pl, flush.pl, fastcwd.pl, exceptions.pl, ctime.pl, complete.pl, cacheout.pl, bigrat.pl, bigint.pl, bigfloat.pl, assert.pl, abbrev.pl, dotsh.pl, timelocal.pl は全て非推奨となりました。 以前、Perl の開発者は 5.14.0 リリースでこれらのライブラリを Perl コアから 削除しようとしていました。

5.12.0 リリース前の最終テスト中に、複数の開発者が現在の製品コードがこれらの 古いライブラリを使っていることを発見しました; その一部は Perl コア 自身の中にありました。 それで、パンプキングはこれらのライブラリの処刑を猶予しました。 これらは 5.14.0 リリースから非推奨警告が出るようになり、 5.16.0 リリースで削除される予定です。

Unicode のオーバーホール

Perl の開発者は、Perl を最新の Unicode 標準と同期するように更新することに 断固とした努力を行っています。 これに関する変更には以下のものを含みます:

Perl は全ての Unicode 文字特性を扱えるようになりました。 新しい文書である perluniprops には全ての利用可能な非 Unihan 文字特性の 一覧があります。 デフォルトでは、perl は Unihan、非推奨、Unicode 内部の特性を公開しません。 これらに関するさらなる詳細については以下を参照してください; pod にもこれらの一覧があり、なぜ公開しないのかの説明もあります。

正規表現を書くときに =: を使った複合型 Unicode に完全に 対応するようになりました: \p{property=value}\p{property:value} です (これらはどちらも同じ意味です)。

Unicode の\p{...} 構造で、中かっこの間のテキストでの ゆるいマッチングルールに完全に対応しました。 さらに、数値の数字の間に下線を許すようになりました。

Perl は Unicode で定義された、特性への別名と特性値全てを 受け付けるようになりました。

Unicode 論理文字にマッチングする qr/\X/ は、様々なアジア言語で よりよく働くように拡張されました。 これは 拡張書記素クラスタ として定義されます。 (http://www.unicode.org/reports/tr29/ を参照してください)。 以前からマッチングしていたものは引き続きマッチングします。 さらに:

それ以外では、この変更は影響を与えない言語では透過的です。

Canonical_Combining_Class 特性を使った \p{...} マッチングは 以前にリリースされた Perl では完全に壊れていました。 これらは正しく動作するようになったはずです。

Perl 5.12 より前では、Unicode の Decomposition_Type=Compat 特性と Perl のエクステンションが同じ名前を持っていて、全ての正しい値には マッチングしなくなっていました(100 以上間違えたり、数千間違えたりします)。 Perl のエクステンションの名前は Decomposition_Type=Noncanonical (短縮形: dt=noncanon) に変更されました。 これは以前想定していたものと同じ意味を持ちます; つまり全ての 非正準分解型の和集合です; そして Unicode の Compat は単にその一部です。

\p{Decomposition_Type=Canonical} はハングル音節文字を 含むようになりました。

\p{Uppercase}\p{Lowercase} は、Unicode 標準がそうするべきと している通りに動作するようになりました。 これは、今までよりもマッチングする文字が数文字多くなることを意味します。

\p{Cntrl}\p{Control} と同じ文字にマッチングするようになりました。 これは、もはや Private Use (gc=co), Surrogates (gc=cs), Format (gc=cf) 符号位置とマッチングしないことを意味します。 Format 符号位置は最大の可能性がある問題を意味します。 これらのうち、36 以外のものは公式に非推奨か、使用は全く お勧めできません。 もっとも広く使われているらしい 36 は、ソフトハイフン (U+00AD), BOM, ZWSP, ZWNJ, WJ 及び同様の文字、さらに双方向制御です。

\p{Alpha}\p{Alphabetic} と同じ文字に マッチングするようになりました。 5.12 より前では、Perl での定義には実際には Alpha (全てのマーク) ではない 多くのものを含んでいる一方、Alpha である多くのものが除外されていました。 \p{Alnum}\p{Word} の定義は Alpha の定義に依存していて、 同様に変更されました。

\p{Word} は、間違って分数のような非単語文字とマッチングしていましたが、 しなくなりました。

\p{Print} は、もはや行制御文字 (Tab, LF, CR, FF, VT, NEL) と マッチングしなくなりました。 これにより標準と文書が一致します。

\p{XDigit}\p{Hex_Digit} と同じ文字に マッチングするようになりました。 これは、今マッチングしている文字 [A-Fa-f0-9] に追加して、 U+FF10: FULLWIDTH DIGIT ZERO のような、22 個の等価な全角文字にも マッチングするようになりました。

数値特性は、Unihan 文字を含むように拡張されました。

Perl の新しい拡張として 'Present_In' あるいは単に 'In' という特性があります。 これは Unicode Age 特性の拡張ですが、\p{In=5.0} は Unicode バージョン 5.0 現在で 使い方が決定されているあらゆる符号位置に マッチングします。 \p{Age=5.0}まさに バージョン 5.0 で追加された符号位置にのみ マッチングします。

多くの特性が、割り当てられていない符号位置に対して正しい値を 持つようになりました。 影響のある特性は Bidi_Class, East_Asian_Width, Joining_Type, Decomposition_Type, Hangul_Syllable_Type, Numeric_Type, Line_Break です。

Default_Ignorable_Code_Point, ID_Continue, ID_Start 特性は現在の Unicode 定義に更新されました。

Perl の以前のバージョンでは、Unicode 内部専用となっているいくつかの 特性が間違って露出していました。 正規表現でこれらを使うと、(有効になっている場合は)非推奨警告メッセージが 生成されます。 問題の特性は: Other_Alphabetic, Other_Default_Ignorable_Code_Point, Other_Grapheme_Extend, Other_ID_Continue, Other_ID_Start, Other_Lowercase, Other_Math, Other_Uppercase です。

Perl がどの Unicode 特性を理解するかをインストール毎に変更可能に なりました。 上述のように、いくつかの特性はデフォルトでは無効になっています。 これには全ての Unihan 特性 (これらは CPAN モジュール Unicode::Unihan 経由でアクセスできます) 、 非推奨特性、Perl が決して露出させない Unicode 内部専用の特性を含みます。

lib/unicore/To ディレクトリに生成されたファイルは、安定していて、 アプリケーションから直接利用可能であるとより明確に記されました。 これらの新しいハッシュエントリは通常のエントリの形式であり、 マシンがよりよくパースできるようになっています。 Perl はあらゆる特性に関してこのディレクトリにファイルを生成できますが、 ほとんどは抑制されています。 何が書かれるかを変更する手順は perluniprops にあります。

モジュールとプラグマ

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

autodie

autodieFatal モジュール代用品で、新しくレキシカルスコープを 持つものです。 同梱されているバージョンは 2.06_01 です。 このリリースでは、autodie が有効の時に文字列 eval を使うと、 autodie の振る舞いが周りのスコープに漏れるかもしれないことに 注意してください。 さらなる詳細については "BUGS" in autodie を参照してください。

バージョン 2.06_01 が Perl コアに追加されました。

Compress::Raw::Bzip2

バージョン 2.024 が Perl コアに追加されました。

overloading

このプラグマは、演算子の一部あるいは全部を、レキシカルに無効化あるいは 有効化します。

バージョン 0.001 が Perl コアに追加されました。

parent

parent は、基底クラスとの ISA 関係をコンパイル時に構築します。 これは、更なる望まない振る舞いなしに base の主となる機能を 提供します。

バージョン 0.223 が Perl コアに追加されました。

Parse::CPAN::Meta

バージョン 1.40 が Perl コアに追加されました。

VMS::DCLsym

バージョン 1.03 が Perl コアに追加されました。

VMS::Stdio

バージョン 2.4 が Perl コアに追加されました。

XS::APItest::KeywordRPN

バージョン 0.003 が Perl コアに追加されました。

更新されたプラグマ

base

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

bignum

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

charnames

charnames は Unicode NameAliases.txt データベースファイルを 含むようになりました。 これにより、以前は認識されなかった追加の \N 文字名(例えば "\N{LATIN CAPITAL LETTER GHA}") が追加される効果があります。

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

constant

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

diagnostics

diagnostics は内部で %.0f フォーマットに対応するようになりました。

diagnostics はもはや Use of uninitialized value in range (or flip) 警告を抑制しません。 [perl #71204]

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

feature

feature では、:5.10 および :5.10.X で組み込まれる機能が僅かに 変更されました。 最後の要素 (つまり X) がもしあっても、単に無視されます。 これは、一般的にはメンテナンスリリースでは新しい機能はないという仮定に 基づいています。 従って、:5.10:5.10.X は同じ効果を持ちます。 これは 5.10.0 で文書化されている振る舞いへの変更です。

featureunicode_strings 機能を含むようになりました:

    use feature "unicode_strings";

このプラグマは、内部 UTF-8 フラグは設定されていないけれども、128 から 255 までの単一バイト文字を含んでいる文字列に対する、大文字小文字を変更する 操作 (uc, lc, ucfirst, lcfirst) での Unicode の意味論を 有効にします。

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

less

less には、less のサブクラスから、自分のスタッシュが %^H のどこに 保管されているかをわかるようにするための stash_name メソッドが 追加されました。

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

lib

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

mro

mro は XS エクステンションとして実行されました。 文書化されたインターフェースに変更はありません。 利用可能になってしまっていたいくつかの mro:: メソッドの実装詳細に 依存しているコードは、"keep both pieces" になります。

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

overload

overload は 'qr' をオーバーロードできるようになりました。

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

threads

バージョン 1.67 から 1.75 に更新されました。

threads::shared

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

version

version は、この文書のはじめの方で記述し、独自の文書もある、 "Version number formats" に対応しました。

バージョン 0.74 から 0.82 に更新されました。

warnings

warnings に新しい warnings::fatal_enabled() 関数が追加されました。 また、新しい illegalproto 警告カテゴリが追加されました。 この変更については "New or Changed Diagnostics" も参照してください。

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

更新されたモジュール

Archive::Extract

バージョン 0.24 から 0.38 に更新されました。

Archive::Tar

バージョン 1.38 から 1.54 に更新されました。

Attribute::Handlers

バージョン 0.79 から 0.87 に更新されました。

AutoLoader

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

B::Concise

バージョン 0.74 から 0.78 に更新されました。

B::Debug

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

B::Deparse

バージョン 0.83 から 0.96 に更新されました。

B::Lint

バージョン 1.09 から 1.11_01 に更新されました。

CGI

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

Class::ISA

バージョン 0.33 から 0.36 に更新されました。

注意: Class::ISA は非推奨で、将来のバージョンの Perl では 削除されるかもしれません。

Compress::Raw::Zlib

バージョン 2.008 から 2.024 に更新されました。

CPAN

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

CPANPLUS

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

CPANPLUS::Dist::Build

バージョン 0.06_02 から 0.46 に更新されました。

Data::Dumper

バージョン 2.121_14 から 2.125 に更新されました。

DB_File

バージョン 1.816_1 から 1.820 に更新されました。

Devel::PPPort

バージョン 3.13 から 3.19 に更新されました。

Digest

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

Digest::MD5

バージョン 2.36_01 から 2.39 に更新されました。

Digest::SHA

バージョン 5.45 から 5.47 に更新されました。

Encode

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

Exporter

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

ExtUtils::CBuilder

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

ExtUtils::Command

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

ExtUtils::Constant

バージョン 0.2 から 0.22 に更新されました。

ExtUtils::Install

バージョン 1.44 から 1.55 に更新されました。

ExtUtils::MakeMaker

バージョン 6.42 から 6.56 に更新されました。

ExtUtils::Manifest

バージョン 1.51_01 から 1.57 に更新されました。

ExtUtils::ParseXS

バージョン 2.18_02 から 2.21 に更新されました。

File::Fetch

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

File::Path

バージョン 2.04 から 2.08_01 に更新されました。

File::Temp

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

Filter::Simple

バージョン 0.82 から 0.84 に更新されました。

Filter::Util::Call

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

Getopt::Long

バージョン 2.37 から 2.38 に更新されました。

IO

バージョン 1.23_01 から 1.25_02 に更新されました。

IO::Zlib

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

IPC::Cmd

バージョン 0.40_1 から 0.54 に更新されました。

IPC::SysV

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

Locale::Maketext

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

Locale::Maketext::Simple

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

Log::Message

バージョン 0.01 から 0.02 に更新されました。

Log::Message::Simple

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

Math::BigInt

バージョン 1.88 から 1.89_01 に更新されました。

Math::BigInt::FastCalc

バージョン 0.16 から 0.19 に更新されました。

Math::BigRat

バージョン 0.21 から 0.24 に更新されました。

Math::Complex

バージョン 1.37 から 1.56 に更新されました。

Memoize

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

MIME::Base64

バージョン 3.07_01 から 3.08 に更新されました。

Module::Build

バージョン 0.2808_01 から 0.3603 に更新されました。

Module::CoreList

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

Module::Load

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

Module::Load::Conditional

バージョン 0.22 から 0.34 に更新されました。

Module::Loaded

バージョン 0.01 から 0.06 に更新されました。

Module::Pluggable

バージョン 3.6 から 3.9 に更新されました。

Net::Ping

バージョン 2.33 から 2.36 に更新されました。

NEXT

バージョン 0.60_01 から 0.64 に更新されました。

Object::Accessor

バージョン 0.32 から 0.36 に更新されました。

Package::Constants

バージョン 0.01 から 0.02 に更新されました。

PerlIO

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

Pod::Parser

バージョン 1.35 から 1.37 に更新されました。

Pod::Perldoc

バージョン 3.14_02 から 3.15_02 に更新されました。

Pod::Plainer

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

注意: Pod::Plainer は非推奨で、将来のバージョンの Perl では 削除されるかもしれません。

Pod::Simple

バージョン 3.05 から 3.13 に更新されました。

Safe

バージョン 2.12 から 2.22 に更新されました。

SelfLoader

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

Storable

バージョン 2.18 から 2.22 に更新されました。

Switch

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

注意: Switch は非推奨で、将来のバージョンの Perl では 削除されるかもしれません。

Sys::Syslog

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

Term::ANSIColor

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

Term::UI

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

Test

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

Test::Harness

バージョン 2.64 から 3.17 に更新されました。

Test::Simple

バージョン 0.72 から 0.94 に更新されました。

Text::Balanced

バージョン 2.0.0 から 2.02 に更新されました。

Text::ParseWords

バージョン 3.26 から 3.27 に更新されました。

Text::Soundex

バージョン 3.03 から 3.03_01 に更新されました。

Thread::Queue

バージョン 2.00 から 2.11 に更新されました。

Thread::Semaphore

バージョン 2.01 から 2.09 に更新されました。

Tie::RefHash

バージョン 1.37 から 1.38 に更新されました。

Time::HiRes

バージョン 1.9711 から 1.9719 に更新されました。

Time::Local

バージョン 1.18 から 1.1901_01 に更新されました。

Time::Piece

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

Unicode::Collate

バージョン 0.52 から 0.52_01 に更新されました。

Unicode::Normalize

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

Win32

バージョン 0.34 から 0.39 に更新されました。

Win32API::File

バージョン 0.1001_01 から 0.1101 に更新されました。

XSLoader

バージョン 0.08 から 0.10 に更新されました。

削除されたモジュールとプラグマ

attrs

Perl コアから削除されました。 以前のバージョンは 1.02 でした。

CPAN::API::HOWTO

Perl コアから削除されました。 以前のバージョンは 'undef' でした。

CPAN::DeferedCode

Perl コアから削除されました。 以前のバージョンは 5.50 でした。

CPANPLUS::inc

Perl コアから削除されました。 以前のバージョンは 'undef' でした。

DCLsym

Perl コアから削除されました。 以前のバージョンは 1.03 でした。

ExtUtils::MakeMaker::bytes

Perl コアから削除されました。 以前のバージョンは 6.42 でした。

ExtUtils::MakeMaker::vmsish

Perl コアから削除されました。 以前のバージョンは 6.42 でした。

Stdio

Perl コアから削除されました。 以前のバージョンは 2.3 でした。

Test::Harness::Assert

Perl コアから削除されました。 以前のバージョンは 0.02 でした。

Test::Harness::Iterator

Perl コアから削除されました。 以前のバージョンは 0.02 でした。

Test::Harness::Point

Perl コアから削除されました。 以前のバージョンは 0.01 でした。

Test::Harness::Results

Perl コアから削除されました。 以前のバージョンは 0.01 でした。

Test::Harness::Straps

Perl コアから削除されました。 以前のバージョンは 0.26_01 でした。

Test::Harness::Util

Perl コアから削除されました。 以前のバージョンは 0.01 でした。

XSSymSet

Perl コアから削除されました。 以前のバージョンは 1.1 でした。

非推奨になったモジュールとプラグマ

上述の "Deprecated Modules" を参照してください。

文書

新しい文書

既存の文書の変更

パフォーマンスの向上の抜粋

インストールと設定の改良

内部の変更

Perl のそれぞれのリリースでは普段の使用には影響を与えないはずの 多くの内部変更を行っていますが、 それでも Perl のソースコードで作業をする開発者にとって 注目するべきものもあります。

テスト

テストの改良

並列テスト

コア配布は、Unix 風プラットフォームでは退行テストを並列に実行できるように なりました。 make test を実行する代わりに、環境変数 TEST_JOBS に並列に 実行するテスト数を設定して、make test_harness を実行します。 Bourne-風のシェルでは、これは以下のようにします

    TEST_JOBS=3 make test_harness  # Run 3 tests in parallel

並列 make 自身ではなく、環境変数を使います; なぜなら TAP::Harness はここの競合しないテストスクリプト自身を計画できる必要が ありますが、make ユーティリティのジョブスケジューラと相互作用するための 標準的なインターフェースはないからです。

いくつかのテストスクリプト(特に ext/IO/t/io_dir.t)は並列に実行すると 失敗するかもしれないことに注意してください。 もし必要なら、失敗したスクリプトを順番に再実行して、失敗しなくなることを 確認してください。

テストハーネスの柔軟性

PERL5OPTt/TEST にある親類を上書きできるようになりました。

Test watchdog

いくつかのテストは、テストが時間切れになった後に kill することで make testmake test_harness が自動的に実行を終了することを 確実にするために組み込まれた「番犬」機能で失敗すると、 ハングアップしてしまう可能性がありました。

新しいテスト

Perl の開発者は多くの新しいテストをコアに追加しました。 以下に挙げたものに加えて、CPAN から更新された多くのモジュールに 新しいテストが追加されています。

新しい、または変更された診断メッセージ

新しい診断メッセージ

変更された診断メッセージ

既にある多くの診断メッセージが改良されたり修正されたりしました:

以下の診断メッセージは削除されました:

ツールの変更

バグ修正の抜粋

プラットフォーム固有の変更

Perl はものすごく移植性が高いです。 一般的に、あるプラットフォームに C コンパイラがあれば、誰かが Perl を移植しています (あるいはそのうちに移植します)。 私たちは、Perl 5.12 でいくつかの新しいプラットフォームに対応したことを 喜んでお伝えいたします。 同時に、(とても)古い友人のいくつかに別れの挨拶をする時が来ました。

新しいプラットフォーム

Haiku

Perl の開発者は Haiku 管理者からのパッチをマージしました。 Perl は Haiku でビルドできるようになったはずです。

MirOS BSD

Perl は MirOS BSD でビルドできるようになったはずです。

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

Domain/OS
MiNT
Tenon MachTen

更新されたプラットフォーム

AIX
Cygwin
Darwin (Mac OS X)
DragonFly BSD
FreeBSD
Irix
NetBSD
OpenVMS
Stratus VOS
Symbian
Windows

既知の問題

以下はいくつかの重要な未修正のバグの一覧で、5.10.x か 5.8.x からの 退行です。

正誤表

Acknowledgements

Perl 5.12.0 は、Perl 5.10.0 以降、200 人以上の作者とコミッタによって、 3,000 以上のファイルに 750,000 行以上の変更を加えて、 ほぼ 2 年間開発されてきました。

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

Aaron Crane, Abe Timmerman, Abhijit Menon-Sen, Abigail, Adam Russell, Adriano Ferreira, Ævar Arnfjörð Bjarmason, Alan Grover, Alexandr Ciornii, Alex Davies, Alex Vandiver, Andreas Koenig, Andrew Rodland, andrew@sundale.net, Andy Armstrong, Andy Dougherty, Jose AUGUSTE-ETIENNE, Benjamin Smith, Ben Morrow, bharanee rathna, Bo Borgerson, Bo Lindbergh, Brad Gilbert, Bram, Brendan O'Dea, brian d foy, Charles Bailey, Chip Salzenberg, Chris 'BinGOs' Williams, Christoph Lamprecht, Chris Williams, chromatic, Claes Jakobsson, Craig A. Berry, Dan Dascalescu, Daniel Frederick Crisman, Daniel M. Quinlan, Dan Jacobson, Dan Kogai, Dave Mitchell, Dave Rolsky, David Cantrell, David Dick, David Golden, David Mitchell, David M. Syzdek, David Nicol, David Wheeler, Dennis Kaarsemaker, Dintelmann, Peter, Dominic Dunlop, Dr.Ruud, Duke Leto, Enrico Sorcinelli, Eric Brine, Father Chrysostomos, Florian Ragwitz, Frank Wiegand, Gabor Szabo, Gene Sullivan, Geoffrey T. Dairiki, George Greer, Gerard Goossen, Gisle Aas, Goro Fuji, Graham Barr, Green, Paul, Hans Dieter Pearcey, Harmen, H. Merijn Brand, Hugo van der Sanden, Ian Goodacre, Igor Sutton, Ingo Weinhold, James Bence, James Mastros, Jan Dubois, Jari Aalto, Jarkko Hietaniemi, Jay Hannah, Jerry Hedden, Jesse Vincent, Jim Cromie, Jody Belka, John E. Malmberg, John Malmberg, John Peacock, John Peacock via RT, John P. Linderman, John Wright, Josh ben Jore, Jos I. Boumans, Karl Williamson, Kenichi Ishigaki, Ken Williams, Kevin Brintnall, Kevin Ryde, Kurt Starsinic, Leon Brocard, Lubomir Rintel, Luke Ross, Marcel Grünauer, Marcus Holland-Moritz, Mark Jason Dominus, Marko Asplund, Martin Hasch, Mashrab Kuvatov, Matt Kraai, Matt S Trout, Max Maischein, Michael Breen, Michael Cartmell, Michael G Schwern, Michael Witten, Mike Giroux, Milosz Tanski, Moritz Lenz, Nicholas Clark, Nick Cleaton, Niko Tyni, Offer Kaye, Osvaldo Villalon, Paul Fenwick, Paul Gaborit, Paul Green, Paul Johnson, Paul Marquess, Philip Hazel, Philippe Bruhat, Rafael Garcia-Suarez, Rainer Tammer, Rajesh Mandalemula, Reini Urban, Renée Bäcker, Ricardo Signes, Ricardo SIGNES, Richard Foley, Rich Rauenzahn, Rick Delaney, Risto Kankkunen, Robert May, Roberto C. Sanchez, Robin Barker, SADAHIRO Tomoyuki, Salvador Ortiz Garcia, Sam Vilain, Scott Lanning, Sébastien Aperghis-Tramoni, Sérgio Durigan Júnior, Shlomi Fish, Simon 'corecode' Schubert, Sisyphus, Slaven Rezic, Smylers, Steffen Müller, Steffen Ullrich, Stepan Kasal, Steve Hay, Steven Schubiger, Steve Peters, Tels, The Doctor, Tim Bunce, Tim Jenness, Todd Rinaldo, Tom Christiansen, Tom Hukins, Tom Wyant, Tony Cook, Torsten Schoenfeld, Tye McQueen, Vadim Konovalov, Vincent Pit, Hio YAMASHINA, Yasuhiro Matsumoto, Yitzchak Scott-Thoennes, Yuval Kogman, Yves Orton, Zefram, Zsban Ambrus

これはバージョンコントロール履歴から自動的に生成しているので、 悲惨なほどに不完全です。 特に、Perl 5.12.0 をよりよくするための助けとなった、以前のバージョンの Perl の問題を報告してくれた(とてもありがたい)貢献者の名前を含んでいません。 全ての Perl の歴史的な貢献者のより完全な一覧はについては、 どうか Perl 5.12.0 配布に含まれている AUTHORS を参照してください。

私たちの「引退した」パンプキングである Nicholas Clark と Rafael Garcia-Suarez は、素晴らしく現実的に継続されている貢献に対して 特別な感謝に値します。 Nicholas は個人的に、5.10.0 以降のパッチの 30% 以上を書いています。 Rafael はパッチの量では 11% で 2 位ですが、他の人が書いたパッチの コミット量では断トツの 1 位で、5.10.0 以降この分野ではコミットの 44% が 彼のものです; これはしばしばパッチ作者への少なからぬ指導の後のものです。 これらの統計資料は彼らの貢献の全てを表すには全く不足していますが、 彼らなしではリリースできなかったことを手短に表現しています。

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

バグ報告

もしバグと思われるものを見つけたら、comp.lang.perl.misc ニュースグループに 最近投稿された記事や http://rt.perl.org/perlbug/ にある perl バグ データベースを確認してください。 Perl ホームページ、http://www.perl.org にも情報があります。

もしまだ報告されていないバグだと確信したら、そのリリースに含まれている perlbug プログラムを実行してください。 バグの再現スクリプトを十分小さく、しかし有効なコードに切りつめることを 意識してください。バグレポートは perl -V の出力と一緒に perlbug@perl.org に送られ Perl porting チームによって解析されます。

もし報告しようとしているバグがセキュリティに関するもので、公開されている メーリングリストに送るのが不適切なものなら、 perl5-security-report@perl.org に送ってください。 このアドレスは、問題の影響を評価し、解決法を見つけ、Perl が対応している 全てのプラットフォームで問題を軽減または解決するパッチをリリースするのを 助けることが出来る、全てのコアコミッタが参加している非公開の メーリングリストになっています。 このアドレスは、独自に CPAN で配布されているモジュールではなく、 Perl コアのセキュリティ問題だけに使ってください。

SEE ALSO

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

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

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

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

http://dev.perl.org/perl5/errata.html には、このリリース以降に 発見された問題や、このリリースと互換性のないとわかった CPAN モジュールの 一覧があります。