目次
perldelta - perl v5.9.4 更新情報
このドキュメントでは開発リリース 5.9.3 と 5.9.4 の間での変更点を 説明します. 5.8.0 から 5.9.3 までの変更点は perl590delta [CPAN], perl591delta [CPAN], perl592delta [CPAN] そして perl593delta [CPAN] を 参照してください.
chdir() の裸の単語(bareword)引数はファイルハンドルとして 処理されるようになりました. これまでのリリースではbarewordは ディレクトリ名として処理されていました.
perl の古い機能で, require や use が拡張子 .pm をもつ
ファイルを探す前に同じファイル名で拡張子 .pmc を持つファイルを
先に探していました. このファイルが見つかった時は .pm 拡張子で
終わるファイルの存在の代わりにロードされます.
これまでは, .pmc ファイルは .pm とり新しい場合にだけ ロードされました. 5.9.4 からはそれが存在する時は常にロード されるようになりました. (このトリックは Pugs で使われて います. )
特殊配列 @- 及び @+ は正規表現の中に住み着かなくなりました.
(Sadahiro Tomoyuki)
taint されている名前で関数を呼び出して, それが AUTOLOAD 関数を 呼び出したとき, $AUTOLOAD は(正しく) taint されるようになりました. (Rick Delaney)
新しい変数の種類が導入されました. state 変数は my 変数と
似ていますが, my の代わりに state キーワードで宣言されます.
これはそのレキシカルスコープでのみ可視になりますが,
その値は永続します: my 変数とは異なりスコープに入ったときには
未定義ではなく, 以前の値を復元します. (Rafael Garcia-Suarez)
state 変数を使うには次のコード
use feature "state";
かワンライナであれば -E コマンドラインスイッチで有効にする
必要があります.
perlsub 内 "Persistent variables via state()" [CPAN] を参照してください.
UNIVERSAL クラスに新しいメソッド DOES() が追加されました.
これは isa() メソッドの抱えていた意味的な問題を解決するために
追加されていました. isa() は継承関係を調べますが, DOES() は
モジュールの作者が(継承に加えて)それ以外の種類のクラス間の関係を
オーバーライドすることができるように設計されています. (chromatic)
UNIVERSAL 内 "$obj->DOES( ROLE )" [CPAN] を参照してください.
定数畳み込みルーチンは例外ハンドラに包まれるようになりました, そしてもし畳み込み時に例外が発生した場合には(0/0 を評価した等), perl プログラム全体をアボートするのではなくその時点の optree を 維持します. (Nicholas Clark, Dave Mitchell)
ソースフィルタをフックで開かれて返されたファイルハンドルの 先頭に加えることで @INC での関数によるフックメカニズムを 拡張することが可能です. この機能はずいぶん前から計画されて いましたが, これまで全然手をつけられていませんでした. 詳細は perlfunc 内 "require" [CPAN] を参照してください. (Nicholas Clark)
MAD, いろいろな属性修飾 (Misc Attribute Decoration), は
Perl 5 から Perl 6 へのコンバータへと至る作業の開発段階に
あります. これを有効にするには Configure 引数に -Dmad 引数
を渡す必要があります. これによって作られる perl はふつうに作られた
perl 5.9.4 とはバイナリ互換がなく, また, 空間, 速度にペナルティを
もちます; さらにはまだ全てのレグレッションテストには通過していま
せん. (Larry Wall, Nicholas Clark)
encoding::warnings はレキシカルプラグマになりました.
(しかしレキシカルプラグマをサポートしていない古い perl では
グローバルな振る舞いのままです.) (Audrey Tang)
threads はデュアルライフなモジュールになり, CPAN からも
提供されるようになりました. これはいくつかの方法で拡張されて
います. スレッドに対してシグナルを送る kill() メソッドが提供
されるようになりました. スレッドのステータスや実行されている,
若しくは join 可能なスレッドの一覧を取得できるようになりました.
新しい threads->exit() メソッドはアプリケーションから exit
するためや(これは main スレッドのデフォルトです), 現在のスレッド
のみから exit するため(これはそれ以外のスレッドのデフォルトです)に
使うことができます. 言い換えると, exit() 組み込み関数は常に
アプリケーション全体を終了させます. (Jerry D. Hedden)
Anno Siegel による Hash::Util::FieldHash が追加されました.
このモジュールは field hash のサポートを提供します:
これはスレッドセーフでガーベジコレクトされる形で,
リファレンスの値との関係を保持します.
Ken Williams による Module::Build が追加されました.
これは perl モジュールをビルド及びインストールするための
ExtUtils::MakeMaker の代替です.
Jos Boumans による Module::Load が追加されました. これは
Perl モジュールと .pl ファイルをロードする単一のインターフェース
を提供します.
Jos Boumans による Module::Loaded が追加されました. これは
モジュールがロードされているかいないかを調べるのに役立ちます.
Jos Boumans による Package::Constants が追加されました.
これは指定されたパッケージで宣言されている全ての定数をリストアップ
する簡単なヘルパーです.
McQueen による Win32API::File が(Windows ビルドに)追加されました.
このモジュールはファイル/ディレクトリに対する Win32 システム API
呼び出しへの低レベルなアクセスを提供します.
Module::Build から config_data ユーティリティが新しく
加わりました. これは configure 可能な Module::Build のフレーム
ワークを使っている Perl モジュール(つまり, 親モジュールに対する
ローカルな設定情報を含んでいる *::ConfigData モジュール)の
設定をするためのコマンドラインインターフェースを提供します.
perlpragma [CPAN] マニュアルページは自分のレキシカルなプラグマを pure Perl でどうやって書くかを説明しています(5.9.4 から可能です).
perlreguts [CPAN] マニュアルページ, Yves Orton の作法, は Perl 正規表現エンジンの内部を説明しています.
perlunitut [CPAN] マニュアルページは Perl での Unicode 及び 文字列縁故ーでゅイングを使ったプログラム方法のチュートリアルで, Juerd Waalboer の作法です.
いくつかの内部データ構造 (typeglobs, GV, CV, format)は よりメモリ消費の少ない構造に再設計されました. (Nicholas Clark)
UTF-8 キャッシュコードはより効率的に, そしてより多く 使われるようになりました. (Nicholas Clark)
正規表現エンジンは再帰しなくなりました, これはスタックを あふれさせるようなパターンはわかりやすい説明を出して die するか, スタックを前もって吹き飛ばすことができても終了までにとても 長い時間がかかります. もし不定期なスタックオーバーフロー(もしくは segfault)が起こるのであればハングする代わりに生成を分離した 正規表現を見つける perl を見つけ出すためにアップグレードして ください.
1文字からなるクラスはリテラルとして使われている文字と同一に 扱われるようになりました, これは文字クラスをエスケープとして使っている コードのスピードアップを意味します. (Yves Orton)
選択(Alternations; "|")は, 可能であればより効率的なマッチング 構造へと最適化されるようになりました. 文字列リテラルの選択は トライへとマージされ, 同時にマッチが行われるようになります. これはある場所で N 個の選択マッチがあった場合に O(N) ではなく 新しいコードでは O(1) で処理されるようになります. (Yves Orton)
捕捉: perl の歴史的な貧弱な選択パフォーマンスに関連する多くの コードが残っています. それの為にしばしば使われているトリックは 新しい最適化では無効になります. 幸運にもこの目的で使われている ユーティリティモジュールは 5.10 がリリースされるまでこの 新しい最適化についての教育を受けるでしょう.
パターンがトライ化可能な選択で始まっていてよりよい最適化が なかった場合に正規表現エンジンは開始位置を探すために Aho-Corasick マッチを使います. (Yves Orton)
Windows において, perl の stat() 関数は通常リンク回数を 決定してハードリンクを通して変更されたかもしれない属性を更新するために ファイルを開きます. ${^WIN32_SLOPPY_STAT} に真を設定すると この処理を行わなくなり stat() の速度が向上します.
新しい Configure で再配置可能な perl ツリーの生成がサポート
されました. Configure に -Duserelocatableinc を指定することで
@INC (及び %Config にあるそれ以外の全て)は perl 実行形式の
パスからその位置を選択可能になりました.
これはパスの始まりに文字列 ".../" が見つかると, それは $^X の
ディレクトリで置き換えられるということです. これによって,
-Duserelocatableinc によるデフォルトでは全てが再配置されますが,
再配置はディレクトリベースで行われます. 最初のインストールは最初に
configure で行った prefix へと行われます.
z/OS で正しく動作する Perl を作るために多くの向上が行われ ました.
Perl は DragonFlyBSD での動作が報告されました.
perl とバンドルされている XS モジュールにある全ての ppport.h ファイルはビルド時に生成されるようになりました. (Marcus Holland-Moritz)
configure プロセスで strlcat() 及び strlcpy() が提供されているか を検出するようになりました. これらが提供されていなかった場合には perl の独自版が使われます(Russ Allbery によるパブリックドメイン実装). perl インタプリタの様々な場所でこれらを使うようになりました. (Steve Peters)
Perl 自身が Microsoft VC++ コンパイラでビルドされていた場合の MinGW コンパイラによる XS 拡張モジュールのビルドサポートが向上されました. (ActiveState)
Microsoft の 64-bit コンパイラでのビルドのサポートが 向上しました. (ActiveState)
Windows において, PERL5SHELL 環境変数は taint 性を確認されるように なりました. (Rafael Garcia-Suarez)
stat() 及び -X ファイルテストは *FILE ファイルハンドルの
ように *FILE{IO} ファイルハンドルを扱うようになりました.
リファレンスが他のクラスへと再blessされてもオーバーロードは 動作するようになりました. 内部的にはこれは"オーバーロードされている" というフラグがリファレンスから論理的に常に存在しているべき場所である その参照先へと移動することで実装されています. (Nicholas Clark)
文字列化をオーバーロードしているオブジェクトでの UTF-8 処理に 関連したいくつかのバグが修正されました. (Nicholas Clark)
以前より, eval 'syntax error' は悪いことにリークを起こしていました.
いくつかの(けど全てではない)これらのリークは削除若しくは削減されました.
(Dave Mitchell)
これまでのバージョンではランダム生成の種を作るときに /dev/urandom が存在すればそこから読んでいました. このファイルが Windows で 間の悪いことに存在していても適切なデータを持っていないため, Windows ではこのファイルからは読まないようになりました. (Alex Davies)
『state変数 %s は再初期化されます』 state 変数に初期値を割り当てることはできますが, それはリスト代入の 一部として宣言されていないときです. perldiag [CPAN] を参照してください.
新しいファイル, mathoms.c には perl コアではもう使われていない 関数を含んでいます, これらは他のモジュールで使っているかもしれないため 保持はしています. これらは因数分解の努力からきています: 例えば多くの PP 関数はいくつかの ops で共有されています.
特殊変数 $^H 及び %^H の実装は pure perl でレキシカル プラグマを実装できるようにするために変更されました.
警告テストの1つ (lib/warnings.t の 263 番)は UTF-8 ロケール で失敗します.
いくつかのプラットフォームで Bytecode テストは失敗します. 私たちは 5.10.0 のリリースの前に byteloader と compiler の サポートを外すことを考えています.
もしバグと思われるものが見つかったら, comp.lang.perl.misc ニュース グループに最近投稿された記事や http://rt.perl.org/rt3/ にある perl バグデータベースを確認してください. Perl ホームページ, http://www.perl.org にも情報はあります.
もしまだ報告されていないバグだと確信したら, そのリリースに含まれている
perlbug プログラムをを実行してください. バグの再現スクリプトを
十分小さく, しかし有効なコードに切りつめることを意識してください.
バグレポートは perl -V の出力と一緒に perlbug@perl.org に送られ
Perl porting チームによって解析されます.
Changes には完全な変更箇所があります.
INSTALL には Perl をビルドする方法があります.
README には一般的な事項があります.
Artistic 及び Copying には著作権情報があります.
山科 氷魚 (YAMASHINA Hio) <hio@hio.jp>
原典: perl VERSION 5.9.4. 翻訳日: 2007-03-21.