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