目次
perldelta - perl v5.8.9 の新機能
このドキュメントでは 5.8.8 リリースと 5.8.9 リリースとでの相異点を 説明します.
5.8.8 と意図的な非互換はありません. もしなにか非互換と思われる事項が ありましたら, それらはバグでしょう. ぜひ報告をお願いします.
Perl 5.8 に含まれる Unicode 文字データベースのコピーは 4.1.0 から 5.1.0 に更新されました. 主な変更点は http://www.unicode.org/versions/Unicode5.1.0/#NotableChanges を参照してください.
ディレクトリハンドルに対して stat 及び -X ファイルstat演算を
行えるようになりました. ディレクトリ及びファイルハンドルが共に
ベアワードだった場合には, どちらになるかはあいまいです.
その様なときにはファイルハンドルとしての動作が優先されます.
どちらでも *FILE ファイルハンドルのように *FILE{IO}
として扱われます.
フックによって開かれて返されたファイルハンドルに対して ソースフィルタを加えることで @INC での関数によるフックの メカニズムを強化できるようになりました. この機能は長い間予定は立てられていましたが, これまでは実装されていませんでした. 詳細は perlfunc 内 "require" [CPAN] を参照してください. (Nicholas Clark)
定数畳み込み処理が例外ハンドラに補足されるようになり, 畳み込み時に例外が投げられた場合には(例えば 0/0 の評価時), perl はプログラム全体を中断するのではなく その時点の optree を維持するようになりました. この変更 なしには, プログラムは例外を生成する式を持っているプログラムを, たとえその式が実行時に到達しない箇所であったとしても コンパイルできません. (Nicholas Clark, Dave Mitchell)
no VERSION
特定のバージョンより古い perl を使いたいときに
no に続けてバージョン番号を指定することで
できるようになりました.
文字列に於いて文字オフセットのために算出された UTF-8 バイトオフセット のキャッシュを行うコードが書き直されました. いくつかのバグは落ち着き削除され, そしてコードはそこに持っている情報をより良く, そして高速に使えるように なりました. 特に, 文字列のオフセットを計算する前に 文字列の最後まで計算しないために, 長い文字列に於いて高速になりました. また実行時に疑わしい問題の原因かどうかを確認できるように, キャッシュ部分のコードを無効にできるようになりました.
Configure は実行時に再配置可能な perl tree の設置をサポートしました. "再配置可能なインストール" を参照してください.
${^CHILD_ERROR_NATIVE}
この変数は最後のパイプクローズ, バックティックコマンド(``),
wait若しくはwaitpidの成功した呼び出し, 若しくはsystem演算子
からのネイティブなステータスを返します.
詳細は perlvar [CPAN] を参照してください. (Gisle Aas より提供)
この変数は内部の UTF-8 オフセットキャッシュコードの状態を 制御します. 1で有効に(デフォルト), 0 で無効に, -1 で線形探索の結果と比較することでキャッシュコードのデバッグを行い, それ以外の値ではpanicします.
readpipe() がオーバーライド可能になりました
組み込み関数 readpipe() がオーバーライド可能になりました.
これによってこれに対応する演算子, qx// (a.k.a. ``)
もオーバーライドすることができます.
Perl 5.8.9 (及び 5.10.0 より以降)では XS モジュールでの
とても基本的な例外処理を行うためのいくつかのマクロが提供されます.
croak するかもしれない処理を呼ぶけれど, Perl に制御を戻す前に
クリーンアップ処理を行いたい時にこれらのマクロを使うことが出来ます.
詳細は perlguts 内 "Exception Handling" [CPAN] を参照してください.
-Dq で -D 実行時における EXECUTING... メッセージを抑制できます.
-Dl で内部命令におけるループの突入及び脱出, そしてジャンプレベルの pop を
ログに出すようになります.
-Dv でトレース出力の一部としてそのプロセスIDを表示するようになります.
Unicode プロパティや transliteration mapping を得るために 正規表現エンジンが使ういくつかの pure-perl コードが XS で再実装されました. (SADAHIRO Tomoyuki)
インタプリタは埋め込み可能な定数のよりもっとメモリ効率の良い形式を 内部的にサポートしました. シンボルテーブルに定数値へのリファレンスを 格納することは定数関数を参照する完全なタイプグロブと等価ですが, 400 バイトのメモリ削減となります. このproxyされた定数関数は 必要であれば実際のタイプグロブへと自動的にアップグレードされます. ここで取ったアプローチは既に行われている関数スタブ宣言において 完全なタイプグロブを置く代わりに単なるスカラーを格納する 空間最適化と似ています.
しかしながら, シンボルテーブルにタイプグロブ以外の物が入っていることを (悪いことに)予期していない既存のコードの下位互換を助けるために, コアではれぐれっしょんてすと以外ではこの機能は使っていません.
5.005 からは, プロトタイプ付きの関数のスタブはシンボルテーブルにプレインテキストとして 格納され, プロトタイプのないスタブは数値 -1 で格納されます, つまりコアがシンボルテーブルにタイプグロブのみを置くと前提にしている コードは, 10年にわたって誤った前提を取っていることになります.
追加されたコンパイルサポート:
DragonFlyBSD
MidnightBSD
MirOS BSD
RISC OS
Cray XT4/Catamount
Module::Pluggable はプラガブルなサブモジュールを受け付ける簡単な
フレームワークです. バンドルされたバージョンは 3.8 です.
Module::CoreList は $] で示される perl バージョンを
キーとするハッシュのハッシュです. バンドルされたバージョンは 2.12 です.
Win32API::File は Microsoft Windows でコアに採用されました.
attributes は 0.09 へと更新されました.
AutoLoader は 5.67 へと更新されました.
AutoSplit は 1.06 へと更新されました.
autouse は 1.06 へと更新されました.
B は 1.09_01 から 1.19 へと更新されました.
新しい PAD 関連の抽象マクロ B::NV::COP_SEQ_RANGE_LOW,
B::NV::COP_SEQ_RANGE_HIGH, B::NV::PARENT_PAD_INDEX,
B::NV::PARENT_FAKELEX_FLAGS が提供されました,
これらは 5.10.0 以降との格納方法の違いを隠します.
PL_sub_generation の為の B::sub_generation が提供されます.
B::GV::isGV_with_GP が提供されます,
5.10 より前の perl では常に真を返します.
新しい型 B::HE がメソッド VAL, HASH 及び SVKEY_force
と共に追加されました.
B::GVf_IMPORTED_CV フラグが proxy された定数関数がインポート
された際に正しくセットされるようになりました.
PMOP の処理におけるバグが修正されました.
B::BM::PREVIOUS が U16 ではなく U32 を返すようになります.
B::CV::START 及び B:CV::ROOT は XSUB では NULL を返すようになります.
B::CV::XSUB 及び B::CV::XSUBANY は XSUB 以外では 0 を返します.
B::C は 1.05 へと更新されました.
B::Concise は 0.76 へと更新されました.
新しいオプション -src は(nextstat OP からの)各文を, それが生成されたソースコードでの最初の行を前置させて 表示させます.
新しいオプション -stash="somepackage",
"somepackage" を require し, その名前空間にある各関数を
表示します.
ヒントシンボルの詳細に関するドキュメントが追加されました.
B::Debug は 1.05 へと更新されました.
B::Deparse は 0.87 へと更新されました.
print readpipe $x, $y を正しく再生成できるようになりました.
''-()>, ::(), sub :: {}, 等. を正しく処理できるように
なりました [RT #43010].
これらに類似する構文のパースにおける全てのバグは修正されました.
perl -MO=Deparse -e '"my %h = "->()'
perl -MO=Deparse -e '::->()'
perl -MO=Deparse -e 'sub :: {}'
perl -MO=Deparse -e 'package a; sub a::b::c {}'
perl -MO=Deparse -e 'sub the::main::road {}'
内部で自動的に設定される $^H{v_string} は deparse されません.
B::Lint は 1.11 へと更新されました.
B::Terse は 1.05 へと更新されました.
base は 2.13 へと更新されました.
base.pm でのモジュールのロード時にはそのモジュールのグローバルな
$SIG{__DIE__} をマスクします.
@ISA に全部のクラスを一度に push します.
Benchmark は 1.10 へと更新されました.
bignum は 0.23 へと更新されました.
Carp は 1.10 へと更新されました.
引数のバックトレースコードは undef を "undef" と文字列で表示します.
CGI は 3.42 へと更新されました.
constant は 1.17 へと更新されました.
CPAN は 1.9301 へと更新されました.
Cwd は 3.29 へと, (VMSを含む)いくつかのプラットフォーム関係の
強化と共に更新されました.
Data::Dumper は 2.121_17 へと更新されました.
pure Perl 版でハッシュイテレータの現在値を修正 [RT #40668]
パフォーマンスの強化, Win32 のように C の realloc() の
繰り返しの呼び出しが遅い環境で顕著になります.
Benchmark は 1.817 へと更新されました.
Devel::DProf は 20080331.00 へと更新されました.
Devel::Peek は 1.04 へと更新されました.
Devel::PPPort は 3.14 へと更新されました.
diagnostics は 1.16 へと更新されました.
Digest は 1.15 へと更新されました.
DirHandle は 1.02 へと更新されました.
ディレクトリハンドルを閉じる際に
$., $@, $!, $^E, 及び $? を local するようになりました,
既に閉じられている時の警告の副作用が漏れるのを抑制します.
DynaLoader は 1.09 へと更新されました.
DynaLoader はデフォルトでないファイル拡張子を持ったファイルから
ローダブルオブジェクトをダイナミックにロードできるようになりました.
Encode は 2.26 へと更新されました.
Encode::ASCII は Solaris の "646" エンコーディング(ASCII として
よりよく知られています)に対する修正を含んでいます.
Errno は 1.10 へと更新されました.
Exporter は 5.63 へと更新されました.
ExtUtils::Command は 1.15 へと更新されました.
ExtUtils::Constant は 0.21 へと更新されました.
Embed::Embed は 1.28 へと更新されました.
ExtUtils::Install は 1.51 へと更新されました.
ExtUtils::MakeMaker は 6.48 へと更新されました.
INSTALLSITESCRIPT 及び INSTALLVENDORSCRIPT 設定のサポート.
ExtUtils::Manifest は 1.55 へと更新されました.
ExtUtils::ParseXS は 2.19 へと更新されました.
Fatal は 1.06 へと更新されました.
CORE::GLOBAL にあるビルトインを fatal にさせれるように.
File::Basename は 2.77 へと更新されました.
File::Copy は 2.13 へと更新されました.
3-引数 open を使うようになりました.
File::Find は 1.13 へと更新されました.
File::Glob は 1.06 へと更新されました.
ブレース内のブラケットに対して誤った結果を返すバグが修正されました.
File::Path は 2.04 へと更新されました.
File::Spec は 3.29 へと更新されました.
誤った引数の処理の改善.
(VMS 及び Cygwin を含む)いくつかのプラットフォーム関係の改善,
共に相対な引数を処理する際の abs2rel の最適化.
File::Temp は 0.20 へと更新されました.
FindBin は 1.49 へと更新されました.
FileCache は 1.07 へと更新されました.
GDBM_File は 1.09 へと更新されました.
Getopt::Long は 2.37 へと更新されました.
Hash::Util は 0.06 へと更新されました.
IO は 1.23 へと更新されました.
IO::Socket での getpeername 呼び出し回数の削減.
IPC::SysV は 2.00 へと更新されました.
lib は 0.61 へと更新されました.
.par ファイルロードに関する警告の抑制.
libnet は 1.20 へと更新されました.
Locale::Maketext は 1.13 へと更新されました.
Math::BigFloat は 1.60 へと更新されました.
Math::BigInt は 1.89 へと更新されました.
Math::BigRat は 0.22 へと更新されました.
新しいメソッド as_float の実装.
Math::Complex, Math::Trig は 1.54 へと更新されました.
NDBM_File は 1.07 へと更新されました.
GDBM 互換ヘッダを使っているシステムでの g++ 処理の改善.
Net::Ping は 2.35 へと更新されました.
NEXT は 0.61 へと更新されました.
AUTOLOAD, eval ブロック, 及びオーバーロードされた文字列化で
NEXT を動作させた際のいつかのバグの修正.
open は 1.06 へと更新されました.
PerlIO::encoding は 0.11 へと更新されました.
PerlIO::scalar は 0.06 へと更新されました.
[RT #40267] PerlIO::scalar は readonly 状態を考えない // PerlIO::scalar doesn't respect readonly-ness.
PerlIO::via は 0.05 へと更新されました.
Pod::Html は 1.09 へと更新されました.
Pod::Parser は 1.35 へと更新されました.
Pod::Usage は 1.35 へと更新されました.
POSIX は 1.15 へと更新されました.
Fcntl と重複する POSIX 定数は, POSIX で
重複させるのではなく Fcntl からインポートされ再エクスポートされるように
なります.
POSIX::remove は空のディレクトリを削除出来るようになりました.
POSIX::setlocale は複数回の呼び出しに安全になりました.
POSIX::SigRt が追加されました, サポートされているシステムで
POSIX realtime signal 機能へのアクセスを提供します.
re は 0.06_01 へと更新されました.
Safe は 2.16 へと更新されました.
SDBM_File は 1.06 へと更新されました.
SelfLoader は 1.17 へと更新されました.
Shell は 0.72 へと更新されました.
sigtrap は 1.04 へと更新されました.
Socket は 1.81 へと更新されました.
これは gethostbyname の楽観的な使い方を修正します.
Storable は 2.19 へと更新されました.
Switch は 2.13 へと更新されました.
Sys::Syslog は 0.27 へと更新されました.
Term::ANSIColor は 1.12 へと更新されました.
Term::Cap は 1.12 へと更新されました.
Term::ReadLine は 1.03 へと更新されました.
Test::Builder は 0.80 へと更新されました.
Test::Harness は 2.64 へと更新されました.
newline を処理できるようになりました.
Test::More は 0.80 へと更新されました.
Test::Simple は 0.80 へと更新されました.
Text::Balanced は 1.98 へと更新されました.
Text::ParseWords は 3.27 へと更新されました.
Text::Soundex は 3.03 へと更新されました.
Text::Tabs は 2007.1117 へと更新されました.
Text::Wrap は 2006.1117 へと更新されました.
Thread は 2.01 へと更新されました.
Thread::Semaphore は 2.09 へと更新されました.
Thread::Queue は 2.11 へと更新されました.
複雑な構造(例えばハッシュのハッシュ)をキューに追加できるようになりました.
一回で複数個取り出せるようになりました.
キューを監視及び操作する新しいメソッドが追加されました: peek,
insert 及び extract.
Tie::Memoize は 1.1 へと更新されました.
Tie::Memoize::EXISTS はその結果を正しくキャッシュするようになりました.
Tie::RefHash は 1.38 へと更新されました.
Time::gmtime は 1.03 へと更新されました.
Time::Local は 1.1901 へと更新されました.
Time::HiRes は 1.9715 へと更新されました,
様々な(VMSを含む)ビルドの改善及び雑多な(HP-UX 11 ia64を含む)
プラットフォーム関係のバグ修正.
threads は 1.71 へと更新されました.
新しいスレッド状態情報メソッド: is_running, is_detached 及び
is_joinable. list メソッドは実行中若しくはjoin可能なスレッドを
返すように強化されました.
新しいスレッドシグナルメソッド: kill
スレッドスタックサイズを指定する機能を追加.
スレッド終了時の振る舞いを制御する機能の追加. 新しく exit メソッドを
追加.
threads::shared は 1.26 へと更新されました.
1つの内部構造及び回り道の削減により軽量化及び高速化.
ユーザロックはより安全に格納されるように.
新しい関数 shared_clone は共有されている物はそのまま,
共有されていない物は深く複製してオブジェクトのコピーを作ります.
is_shared メソッドが追加されました.
Unicode::Normalize は 1.02 へと更新されました.
Unicode::UCD は 0.25 へと更新されました.
Win32 は 0.38 へと更新されました.
新しい GetCurrentProcessId 関数が追加されました,
これは現在のプロセスに対する 正規の Windows プロセス識別子を,
fork 先で呼ばれていても返します.
XSLoader は 0.10 へと更新されました.
XS::APItest 及び XS::Typemap は内部用のみで,
従ってインストールされなくなります. 多くのテストが XS::APItest
に追加されました.
Andreas König はデバッガの履歴を保存及び読み込む2つの機能を 提供してくれました.
Perl 5.8.9 は新しいユーティリティ perlthanks を加えました, これは perlbug と似たような物ですが, バグ報告ではない物を作者及び Perl のメンテナに送ります. バグ報告がこないとちょっとがっかりしたりします - これが何か変えてくれると思います.
perlbug はコア以外のモジュールの報告かをチェックし, 代わりにそれを CPAN author に送るかどうかを提案します.
空の文字列を定数として定義しない [RT #25366]
h2xs -X の例.
#include 文での "" 及び <<>> クオートの
違いを区別するようになります.
#if defined A || defined B に対するちゃんと正しいコードを
生成します [RT #39130]
いつものように, このドキュメントは訂正, 明確化及びその他の nitfixes の
共有を受け入れます. インデックス用に タグが追加されます.
perlunitut [CPAN] は Juerd Waalboer によって書かれた Unicode に関連する用語及び Perl スクリプトにおいて Unicode を正しく扱う方法です.
perlunicode [CPAN] はユーザ定義プロパティの節が更新されました.
perluniintro [CPAN] は特定のエンコーディングとして正しくないデータを 検出する例を更新しました.
perlcommunity [CPAN] は一層の情報に沿って Perl コミュニティの 概要を提供します.
CORE [CPAN] は Perl のコア機能のための擬似的な名前空間を記述しています.
perlglossary [CPAN] に 廃止されたモジュール及び機能 及び 取り除かれるモジュール が追加されました.
perlhack [CPAN] は更新され, smoke testing の情報が追加されました.
The Perl FAQs (perlfaq1..perlfaq9) が更新されました.
perlcheat [CPAN] は \w, \d, 及び \s に関するより詳細を更新しました.
perldebug [CPAN] はデバッガの呼び方に関する情報を更新しました.
perldiag [CPAN] ドキュメントは exists 及び delete の引数における
アンパサンド付きの関数及び警告に関するいくつかの用語を更新しました.
perlfork [CPAN] では疑似プロセス内における exec の制限を記述しました.
caller 及び pop における節を修正しました.
alarm 関数で select よりも Time::HiRes::ualarm を
言及するようになりました.
-X の優先順位で, ファイルテスト演算子は単項演算子と同一だけれど
パース及び括弧を考慮しません (Eirik Berg Hanssen の発見).
perllocale [CPAN] は Debian バグ #379463 に対応するための
数値のローカライゼーションと POSIX::setlocale に関して調整.
perlmodlib [CPAN] は CPAN::API::HOWTO 及び
Sys::Syslog::win32::Win32 と共に更新されました.
perlre [CPAN] は [[:xxxxx:]] と \p{IsXxxxx} マッチの違いを
反映して更新されました. /g 及び /c 修飾子の節も追加されました.
perlreguts [CPAN] は正規表現エンジンの内部を記述します. これは Yves Orton から提供されました.
perlrebackslash [CPAN] は全ての perl 正規表現におけるバックスラッシュ及び エスケープシーケンスを記述します.
perlrecharclass [CPAN] は Perl 正規表現エンジンでの文字クラスの構文及び 使い方を記述します.
perlrun [CPAN] はハッシュシード PERL_HASH_SEED を明確になるように 更新しました. また -x 及び -u オプションの説明も増えました.
perlsub [CPAN] の例は opendir 構文でレキシカル変数を使うように
更新されました.
perlvar [CPAN] は実GID(real GID; $()と実行GID(effective GID; $))に
関する混乱を修正しました.
perlthrtut 内 "Queues: Passing Data Around" [CPAN] 及び perlothrtut [CPAN] における Perl スレッドチュートリアルの例が修正されました.
perlhack [CPAN] ドキュメントは Jarkko Hietaniemi 及びその他の人によって 多く改善されました.
perltoot [CPAN] は @UNIVERSAL::ISA の変更の際に関する情報を提供します.
perlport [CPAN] は Windows における kill(-9, ...) セマンティクスの
違いを含めるように拡張されました. これは Win32 及び cygwin において
dump がサポートされていないことを明確に言及しています.
INSTALL は更新され今っぽくなりました.
perl 5.000 からのデフォルトでは全ての新しいタイプグロブに空の文字列を
作成します. レキシカル変数の使用の増加は, これらのほとんどが
現在では使われていないことを意味します. Nicholas Clark の努力によって,
Perl は -DPERL_DONT_CREATE_GVSV と共にコンパイルすることでこれら
空のスカラーを生成することを回避することが出来るようになりました.
これは全ての設定の為に確保されるスカラーの数や ithread の生成のために
コピーされる必要のあるスカラーの数を大きく減少させます.
このオプションは既存のインストールされている perl とバイナリ互換がありますが,
これは長く置くことの出来ていた内部の前提を変えることになります,
従ってデフォルトでは有効にされていません, サードパティ性のコードが
この古い振る舞いに依存しているかもしれないからです.
私たちはこの設定をperlの新しい設置で試してみて, 特にマルチスレッドサーバ において全てのサードパーティコードがこれと互換性があることを 確認してみることを推奨します, この設定は有益なパフォーマンスの向上を 得ることが出来るでしょう. 既に設置されているものでは設置前に テストを行っているのでなければこの設定に変えることは推奨されません.
diagnostics は $& を使わなくなりました,
この結果これを使っている全てのコードでの正規表現マッチは
大きく高速になります.
正規表現の単一文字クラスはその文字がリテラルとして 使われているのと同じように扱われるようになりました, つまり, エスケープ機構として文字クラスを使っているコードは スピードアップしたように見えます. (Yves Orton)
Creating anonymous array and hash references (ie. [] and {}) now incurs
no more overhead than creating an anonymous list or hash. Nicholas Clark
provided changes with a saving of two ops and one stack push, which was measured
as a slightly better than 5% improvement for these operations.
多くの strlen() 呼び出しは削減されました,
長さは既に分かっている若しくは長さを渡すAPIの導入若しくは強化によって
などによります.
これは my_sprintf() ラッパの導入にも助けられています,
これは正しい C89 での値を返します - つまりフォーマットされた文字列の長さ.
これまでは sprintf() の復帰値に頼っていませんでした,
なぜならいくつかの古いけれどまだ存在しているプラットフォームで
char *を返す物があります.
index は検索文字列が UTF-8 で格納されているけれど Latin-1 の範囲しか
含んでいないときに高速になりました.
正規表現エンジン内の Unicode swatch キャッシュが使われるように なりました. (初期実装からの提供では探索はキーの不一致がありました). [RT #42839]
Configure は再配置可能な perl ツリーの作成をサポートしました.
Configure に -Duserelocatableinc を指定することで
@INC (及び %Configure のその他の物)のパスに追加で perl
実行形式からのパスを置くことが出来ます.
起動時には, @INC 若しくは Config にある Configure が
再配置可能とマークした(".../"で始まっている)全てのパスは
$^X のディレクトリで前置されます. これは再配置は
ディレクトリ別で設定可能であり, -Duserelocatableinc の
デフォルトは全てが再配置されます. 初期インストールは最初に設定された
プレフィックスへと行われます.
Configure は一時ファイルをよりちゃんと削除するようになりました.
Tom Callaway (RedHat より)もまたコンパイラ及びリンカに渡される
フラグのセットを補完するパッチを提供してくれ,
特に Linux で -fPIC が有効になりました.
また /dev/null がデバイスでないときに croak するようになりました.
新しい設定変数 d_pseudofork が Configure に追加され,
これは Config モジュールの $Config{d_pseudofork} として
提供されます. これは実際の fork サポートなのか Windows
プラットフォームにおける疑似エミュレーションなのかを識別します.
Config.pod 及び config.sh はクロスコンパイルに適切な位置に 配置されるようになりました.
$Config{useshrplib} は共有 perl ライブラリを使うときは
'yes' ではなく 'true' になります.
平行 make が正しく動作するようになりました,
けれども make test が平行に実行されるとまた問題があります.
多くのコンパイル時警告がきれいになりました.
S_emulate_eaccess() のとても頑固なコンパイラ警告は
6回の試行の後に沈静化しました.
g++ サポートも, 特にFreeBSDの為にチューニングされました.
mkppport が統合され, コアにある全ての ppport.h ファイルはビルド時に自動生成されるようになりました (そしてクリーンアップで削除されます).
installman は -Duserelocatableinc 及び DESTDIR と共に
動作するようになりました.
installperl か以下の物をインストールしなくなりました:
共有 perl ライブラリが使われたときのスタティックにリンクされた拡張のスタティックライブラリファイル. (これは不要ではありません. 後述の "Windows" 参照.)
SIGNATURE 及び PAUSE*.pub (CPAN ファイル)
NOTES 及び PATCHING (ExtUtils ファイル)
perlld 及び ld2 (Cygwin ファイル)
AIX, Cygwin, DEC/OSF, FreeBSD, HP/UX, Irix 6 Linux, MachTen, NetBSD, OS/390, QNX, SCO, Solaris, SunOS, System V Release 5.x (UnixWare 7, OpenUNIX 8), Ultrix, UMIPS, uts 及び VOS に対する ヒントの改善があります.
メインの整数型として long long を使う際に -std=c89 及び
-ansi を落とすように,
FreeBSD 6.2 以外(及び恐らくそれ以外のリリース)で,
システムヘッダが perl に必要な機能を宣言しない.
Solaris 10 以降で, バージョン付きの共有ライブラリを必要としない,
なぜならこれらはしばしばプライベート使用のみのライブラリを意味する.
この問題は SUNWbdb [CPAN] (Berkeley DB)がインストールされているときに
発生する. 従って, Solaris 10 が検出されると ignore_versioned_solibs=y
が設定される.
OpenVMS I64 では IEEE math が選択されていないのを許す (けれどもデフォルトでは残す).
IEEE 使用法を config.h に記録.
munchconfig.exe を構築するときに ccflags を使うことで
古い VMS コンパイラを手助け.
-Duseithreads が選択されたときには VMS では 古い Thread 拡張を
ビルドしない.
"NaN" の生文字列を nawk に渡すとコアダンプする - なので この文字列は "*NaN*" に変更.
t/op/stat.t テストはサポートされていれば VMS で ハードリンクのテストを行う.
共有 perl ライブラリを使うとき installperl は (スタティックにリンクされた拡張の) スタティックリンクライブラリ, インポートライブラリ及び エクスポートライブラリ, 及び(ダイナミックにリンクされた格納の) 空のbootstrapファイルをインストールしなくなりました. この修正はデバッグビルドされた perl で Win32 上で PAR-Packer を 日津呂する問題を修正します.
様々な win32 ビルドプロセスの改善, Visual C++ 2005 Express Edition (aka Visual C++ 8.x)のサポートを含む.
perl.exe は MinGW や Borland でビルドされてもアイコンを 持ちます.
perl-static.exe ビルドプロセスの改善.
Win32 makefile に全ての拡張をスタティックにリンクする オプションを追加.
WinCE ディレクトリは Win32 ディレクトリにマージされました.
setlocale テストは Windows XP 以降で再度有効になりました.
内部 Unicode 実装 (UTF-8) に関連する多くの多くのバグが修正されました.
特に, 長く残っていた tie, オーバーロード 若しくは $@ から
Unicode を返す関連のバグがいなくなりました, いくつかは報告には
あがったことはありません.
unpack は内部的には数値型のUTF-8から文字列に変換し戻すように
なりました. これは 5.10 との完全な一貫性と
現在の振る舞いとの妥協です, これは文字列型の"機能"として
しばしば使われています.
IO レイヤで :crlf 及び UTF-16 の同時使用は動作するように
なりました.
Unicode /\s+/ 及び / \0/ におけるsplit の問題は修正されました.
修正されたバグ RT #40641 - 正規表現における Unicode のエンコーディング (encoding of Unicode characters in regular expressions).
正規表現で特定のパターンを使うとパニックになるバグの修正. [RT #45337]
Perl はロケールの文字が UTF-8 でないと(無限内部再帰によって)長い間 segfault していました [RT #41442]:
use open ':locale';
print STDERR "\x{201e}"; # „
PerlIO が Unix ファイルディスクリプタの追跡を維持するために使う
リファレンスカウンタ及び XS FILE *を得たり解放したりするのに
使う API の非一貫性が修正されました.
tie, 汚染(taint) 及びスレッド共有等の機能の実装に使われている
内部システムである Magic に関連するいくつかのバグが修正されました.
いくつかのビット演算はその引数がmagicにかかっているかを検証しない. [RT #24816]
Magic は式 \&$x によって二度呼ばれることはなくなりました
大きな値を割り当てるとtaintが解決されるバグ. [RT #40708]
MAGIC vtable に新しいエントリ svt_local が追加されました.
これは magic を local の間に新しい値に複製した時に
使われます. これは共有変数を local するときの問題を有効にします.
実装の詳細は perlguts 内 "Magic Virtual Tables" [CPAN] を参照してください.
内部的には, perl のオブジェクト性はリファレンスではなく 参照された先のオブジェクトにあります, メソッドはリファレンスを通してのみ呼び出すことができますが. しかしながら, オーバーロードのオリジナルの実装では オーバーロードに関連するフラグをリファレンスに格納していました, リファレンスが複製される若しくは新しいリファレンスの作成時に設定される時は フラグを中継して複製されます. これは明らかにバグの中にあります - もしオブジェクトをオーバーロードを持っているクラスから 持っていないクラスへとブレスし直すと, 他の既存のリファレンスは(そのまま)オーバーロードされたオブジェクトを 示していると考え, その C コードパスを通り, エラーを投げます. 同じように, 他のリファレンスが存在しているときにオーバーロードされている クラスへとブレスするとオーバーロードを使っていないかのようになります.
この実装は 5.10 で修正されました, しかしこれはフラグビットの意味を変更してしまいます, そのためバイナリ互換が維持されず, 5.8.9 へは適用できません. けれども, 5.8.9 は同じバグ修正の実装の回避方法があります. 参照される実体が複数のリファレンスを持っているのなら, 全ての他のリファレンスは検索され, 訂正されます. 完全な検索は現在の関数から外にレキシカル及び引数スタックのスキャンによって 可能であればいつでも回避されます.
あるよく知られた Linux ベンダーはこのバグ修正の不完全な物を 彼らの /usr/bin/perl に適用し, アップストリームに相談することなく パフォーマンスに関するレポートをそうそうに閉じてしまいました. これは十分ではなく, 彼らはその後そのリリースされていない変更に 対する必要な修正を11ヶ月にわたって無視し続けました, 長く苦しめられた支払い顧客から, 広く知られたブログやスラッシュドットでその不手際が取り上げられた ことに触発されて, 大規模な圧力がかけられるまで.
strict は文字列 eval にも波及するように5.8.8 以前において:
$ perl -e 'use strict; eval "use foo bar" or die $@'
Can't locate foo.pm in @INC (@INC contains: ... .) at (eval 1) line 2.
BEGIN failed--compilation aborted at (eval 1) line 2.
5.8.9 以降において:
$ ./perl -Ilib -e 'use strict; eval "use foo bar" or die $@'
Bareword "bar" not allowed while "strict subs" in use at (eval 1) line 1.
これはエラーメッセージをパースしていて間違った振る舞いを当てにしていた プログラムで問題となるかもしれません.
字句解析器は =cute (及び =cut から始まるその他の単語)を
=cut の同名とはみなさなくなりました.
CORE::require 呼び出し
CORE::require 及び CORE::do はそれらが
オーバーライドされていると常に require 及び do として
扱われていました. これは修正されました.
長い /etc/groups エントリにおけるメモリリークは止まりました.
while (my $x ...) { ...; redo } は undef $x すべきでない.
while(), until(), 若しくは for(;;) ループの
条件節における my の存在によって,
本体に余分にスコープを挟むようになりました,
つまり redo はレキシカルを undef しません.
encoding プラグマは LC_ALL 及び LANG 環境変数で
@ 文字に続く部分を正しく無視するようになりました. [RT # 49646]
いくつかの gcc 3.3 最適化でみられる segfault は修正されました.
unpack をスカラーコンテキストで () グループと共に使った際に
segfault することがあるのは修正されました. [RT #50256]
$! が system コールを中断させるシグナルハンドラで
変更されることがあるのは修正されました.
バグ修正 RT #37886 , use strict 'refs' の影響下であっても
defined の引数ではシンボリックデリファレンスが許可されている.
バグ修正 RT #43207, sort 内の lc/uc が復帰値に影響する
バグ修正 RT #45607, *{"BONK"} = \&{"BONK"} が正しく動作しない.
バグ修正 RT #35878, goto &xsub で呼び出された XSUB での croak は perl の内部状態を壊す.
バグ修正 RT #32539, DynaLoader.o は DynaLoader を perl 実行形式にスタティックリンクする必要があるのを回避するために libperl.so に移動しました. この libperl.so は 実行するのに機能する埋め込み perl インタプリタを選るのに必要な全てが 提供されています.
バグ修正 RT #36267 対されたハッシュへの代入は元になっているハッシュ を変更しない.
バグ修正 RT #6006, 大きな置き換え変数を使っている正規表現置換が
時々失敗しする, つまり 置換に単なる $10 ではなく ${10}
(ブラケットに注意)のようなものが含まれているとき.
バグ修正 RT #45053, Perl_newCONSTSUB() はスレッドセーフに.
64 bit ビルドにおける様々な改善.
PerlIOStdio_close() における競合状態を回避するために mutex 保護を追加.
この修正がスレッドテストでの free.t 及び blocks.t の
失敗を改善することを望む.
デバッガで fork された端末の対応を追加, ウィンドウタイトルの更新機能と共に.
USE_MULTI 及び USE_ITHREADS が指定されているけれど
USE_IMP_SYS がないときのビルドの問題が修正されました.
OS2::REXX は 1.04 へと更新されました.
cc 及び gcc において浮動小数点をアライメントするビルドポリシー.
RH7.2 用の 5.6.1 から Intel の icc 用に再パッチ,
[RT #7916], $Config{gccversion} の追加確認を追加.
64 bit 整数を使う際に -DPTR_IS_LONG を使うように.
PerlIO::Scalar メモリ内ファイルレコードスタイル読込の修正.
プロセス終了時のパイプ切断をより強靱に.
Test::Harness 2.64 における VMS exit 処理のバグは修正されました.
configure.com での fcntl ロック capability テストの修正.
VMS において shrplib='define' を useshrplib='true' に置き換え.
File::Find は対象ディレクトリが生ドライブレターで
no_chdir が 1 (デフォルトは 0)の時に失敗している. [RT #41555]
USE_MULTI 及び USE_ITHREADS が指定されているけれど
USE_IMP_SYS がないときのビルドの問題が修正されました.
いくつかの Windows プラットフォームにおいてプロセスIDが 16 bit に 切り詰められないように. ( http://bugs.activestate.com/show_bug.cgi?id=72443 )
バグ修正 RT #54828 perlio.c において Win32 及び Cygwin で
binmode 呼び出しが segmentation fault することがある.
eq を nomethod を使ってオーバーロード出来るように.
64 bit 整数で overload を使った際の様々な問題は訂正されました.
PerlIO ファイルディスクリプタのリファレンスカウントが
正しく処理されるように.
VMS において, UNIX 構文に変換するする際 エスケープされたドットは残すように.
keys %+ が 'ambiguous' 警告を投げないように.
#!perl -d がアサートをトリガーしていたのを修正.
require 呼び出し時に @INC の tie されたコードリファレンスを
文字列化しないように.
@INC 内のコードリファレンスで __FILE__ が使われていたときに
正しい名前を報告するように修正.
sprintf における幅及び精度が 255 文字以降を正しく処理できない [RT #40473]
範囲外を示すリストのスライスは一貫した動作をするように. [RT #39882]
perl 5.8.1 での変更で #! における -s の -foo=bar
形式引数のパースがうまくできなくなっていた.
これは修正されました.
http://bugs.activestate.com/show_bug.cgi?id=43483 を参照してください.
tr/// はスレッドセーフになりました. これまでは swash を pad ではなく
OP に格納していました.
pod2html はアンカーに一貫性のとれたラベルをつけるようになり, ネストした定義リストをよりよく処理するように.
threads のクリーンアップ拒否は perl_free() 及び
perl_destruct() を含むように拡張されました.
いくつかのシステムにおいて, $ENV{TZ} の変更が常に
localtime_r() に反映される訳ではない.
Perl はこれらのシステムにおいて環境の監視を強制するように.
特殊変数 $^R は (?{...}) 構成子を使っている正規表現を
実行しているときにより一貫して設定されるように. 特に,
バックリファレンスや任意のサブパターン (?:...)? が使われていても
設定されます.
この新しい致命的なエラーは C ルーティン Perl_sv_chop() に
スカラーの文字列バッファにない位置が渡されたときに発生します.
これはバグっている XS コードによって引き起こされ, ここからの
修復は出来ません.
この新しい致命的なエラーは perl プロセスが 待機中のシグナルが増えすぎて, これは perl がさらにくるシグナルを安全に処理できるようにしなければ ならなくてアボートする時に発生します.
この新しい致命的なエラーは ACL バージョンファイルテスト演算子が 現在のプラットフォームで提供されていない時に発生します. 早期のチェックでこれは発生しないはずです.
この新しいエラーはタイされた配列が負の数の要素を持つと主張したことを 示します.
これまでの SV アップグレードコードからの内部エラーは少ない情報 Can't upgrade that kind of scalar しか返していませんでした. これは現在の内部タイプ及び要求された新しいタイプを報告します.
誤った引数が exists に渡されたときに投げられるこのエラーは,
"or a subroutine" を適切に含むようになりました. [RT #38955]
Fatal にあるこのエラーは以前は問い合わせにある組み込みの
名前を表示していませんでした(これは %s で出力されるようになります).
以前のこのエラーはカラムについて言及していませんでした.
これは PerlIO::scalar を使っているファイルハンドルに対する
seek でも生成されるようになりました.
新しいエラー, 正規表現コメントの Unicode 文字のエンコーディング処理 RT #40641 の修正の一部として導入.
Win32 及び Cygwin において dump を呼び出したときに
より情報を持った致命的なエラーとして発行されます.
(dump の目的はコアダンプを生成してアボートすることで,
これらのプラットフォームではコアダンプは生成されません,
これは静かに終了するよりは役に立つでしょう.)
localされている/代入されているmagic変数へのset magicは
コンテナのmagicのみ起動されるようになります, すなわち,
$#array ではなく %ENV 若しくは %SIG になります.
新しい API マクロ newSVpvs() は newSVpvn("ISA", 3) といった
構築の代わりに使います. 単一の文字列定数を受け取り,
C のコンパイル時にその長さが決定されます.
新しい API 関数 Perl_newSV_type() は次の一般的な慣用句の
より効率的な置き換えとして使えます
sv = newSV(0);
sv_upgrade(sv, type);
同じように Perl_newSVpvn_flags() は Perl_newSVpv() と
Perl_sv_2mortal() 若しくは等価な Perl_sv_newmortal() と
Perl_sv_setpvn() の連結として使えます.
二つの新しいマクロ mPUSHs() 及び mXPUSHs() が追加されました,
これらを使うことで mortal SV をスタックに簡単に積めるようになります.
これらはスタックに積まれているけれど mortal 化されていない値に
関連するいくつかのバグを修正するのにも使えるでしょう.
Perl_signbit() 関数が NV の符号テストのために追加されました.
これは有効であればシステムから提供されている物に対応します.
Perl_av_reify(), Perl_lex_end(), Perl_mod(), Perl_op_clear(),
Perl_pop_return(), Perl_qerror(), Perl_setdefout(),
Perl_vivify_defelem() 及び Perl_yylex() は拡張から見えるようになりました.
これは Windows において Data::Alias が動作するために必要でした.
Perl_find_runcv() は perl コアの拡張から見えるようになりました.
これは Sub::Current が Windows で動作するために必要でした.
ptr_table* 関数がスレッドでない perl で提供されるようになりました.
Storable はこれを利用します.
内部で多くの小さなクリーンアップが施されました.
特に Perl_sv_upgrade() は出来るだけ単純化され,
まっすぐのコードパス, 新しい本体の初期化のために複数の
一時変数から代入するのではなく memset() 及び memcpy() を
使うようになりました. これはアリーナ管理コードの単純か及び
重複除去の利点ももたらしました.
コードベースにおける数多くの小さな改善が Coverity 静的コードアナライザ からの報告で施されました.
Perl_gv_stashpv(), Perl_gv_stashpvn(), Perl_gv_stashsv()
関数の正しい使い方とドキュメント (最後のパラメータは
真偽値ではなくビットマスクです).
PERL_SYS_INIT, PERL_SYS_INIT3 及び PERL_SYS_TERM マクロは
関数へと変更されました.
PERLSYS_TERM はコンテキストを必要としません.
PerlIO_teardown() はコンテキスト無しに呼ばれます,
そしてこの関数におけるデバッグ出力はそれがインタプリタが
提供されていることを必要とすしてそれは終了時としては
誤った要求であるため無効になりました.
バイナリ互換に影響する全てのコンパイル時のオプションは
グローバル変数 (PL_bincompat_options)へと一緒にグループ化されました.
PERL_REVISION, PERL_VERSION 及び PERL_SUBVERSION の値は
グローバル変数へと戻りました (そして従って共有 perl ライブラリにも
入ります). 加えて MULTIPLICITY においては, perl 実行形式は
インタプリタ構造のサイズ(全体, そしてこのバージョン)を記録するように
なりました. PL_bincompat_options と共にこれは 5.8.10 (及びそれ以降)に
対して共有 perl ライブラリと共にビルドされたときに main() で
共有ライブラリが本当にバイナリ互換かを検証して確認することを可能にします.
シンボリックリファレンスは NUL を埋め込めるようになりました.
新しい公開関数 Perl_get_cvn_flags() をその処理が必要であれば
拡張から使えるようになりました.
コアのコード及び ext 内のXSコードのうち CPAN との二重生活でないものでは,
PL_na, NEWSV(), Null(), Nullav, Nullcv,
Nullhv, Nullhv etc 等のマクロを使わないようになりました.
これらは新しいコードでは推奨されておらず, 特に PL_na は
小さなパフォーマンスへの打撃があります.
CPAN から更新された多くのモジュールが 新しいテストを組み込みました. いくつかのコアテストが追加されています:
DynaLoader モジュールのテスト.
実行時の定数たたみ込みのテスト.
内部タイプ PVBM 及び PVGV の相互動作に
例外がないことを確認する 5.10.0 から組み込まれたテスト.
新しい形式の定数関数のテスト.
Attribute::Handlers のテスト.
dbmopen のテスト.
最初に @INC を tie した後に t/op/inccode.t の
全てのテストを呼び出し.
@INC のコードリファレンスから帰ってきたソースフィルタのテスト.
RT #30970 のテスト.
RT #41484 のテスト.
qr// 構築子のテスト.
他の正規表現で構築された qr// のテスト.
qr// 構築子のテスト.
RT #32840 のテスト.
tie されたスカラーにおける study のテスト.
-T モードで実行時の subst のテスト.
関数若しくはメソッドでなければならないスタッシュエントリにおける
undef 及び delete のテスト.
Perl_sv_upgrade() のテスト.
Pod::Parser が二度呼ばれたときのテスト.
ファイルディスクリプタの exec 経由での継承に関するテスト (close-on-exec).
UTF-8 キャッシュコードのテスト.
Perl_pp_chr() がひっくり返らない奇妙なエンコーディングのテスト.
RT #40641 のテスト.
RT #40641 のテスト.
オーバーロードされた値から Unicode を返すテスト.
tie された変数から Unicode を返すテスト.
新しいバグはありません.
けれども, 修正されたバグを利用していたプログラムは問題を抱える かもしれません. また, 5.10.0 で施されているバグ修正の多くは 5.8.x ブランチにはバックポート出来ません, なぜならその適用には バイナリ非互換を伴う若しくはその変更は長大で組み入れるにはリスクが高い ためです.
私たちは制限のあるボランティア作業者のみであり, メンテナンスの労務はますます複雑になっています. 従って今回のリリースが 5.8.x シリーズにおける 最後の大きなリリースとなるでしょう. 5.8.x の今後のリリースは恐らくセキュリティに関する物か プラットフォームにおけるビルド不具合のみの対応となるでしょう. 従って 5.10.x への統合をまだ始めていないのなら考えるべきでしょう. 他の方法としてはビジネス要件が 5.8.x の継続を必要としているのなら, ActiveState といった法人からの商用サポートを望むかもしれません.
readdir(), cwd(), $^X 及び @INC は
長い名前が現在のコードページ外だった場合に代用の(短い)ファイル名を
使います (Jan Dubois).
Win32 はバージョン 0.38 へと更新されました.
GetOSName からの 'WinVista' 応答が記述され, Vista における
権限昇格のサポートが IsAdminUser に記述されています.
パス名でのユニコード文字のサポート.
cygwin 及び Win64 互換性の向上.
Win32API は 0.1001_01 へと更新されました.
killpg() のサポートが MSWin32 で追加されました (Jan Dubois).
File::Spec::Win32 は 3.2701> へと更新されました.
OS2::Process: Ilya Zakharevich はいくつかの Window* 及び
Clipbrd* 関数の追加及びドキュメント化.
OS2::REXX::DLL, OS2::REXX は 1.03 へと更新されました.
File::Spec::VMS は 3.2701 へと更新されました.
VMS::XSSymSet は 1.1. へと更新されました.
長い間 Perl ハッカーであり, Tk 及び Encode モジュール,
コアにおける perlio.c の作者, そして 5.003_02 pumpking であった
Nick Ing-Simmons は心臓発作により2006年9月25日にこの世を去りました.
彼の死は惜しまれます.
このリリースにおけるいくつかの作業は TPF grant からの資金によります.
Steve Hay はコアモジュールと, そのCPANリリースと, 前のコアリリースとの 違いを調べ, それらをただす最適解を探してくれました. でももう一度はやりたくないそうです. 今回私にかわってやってくれたことを とてもうれしく思います.
Paul Fenwick は 18 のボランティアチームのとりまとめをして, このドキュメントを書いた後に解いてくれました. 特に, Bradley Dean, Eddy Tan そして Vincent Pit は チームの貢献の半分を提供してくれました.
Andreas König 及び Slaven Rezić の crack Berlin ベースのQAチームは休むことなくスナップショットを 更新し続け, それらの CPAN のほとんどをテストし, どのモジュールでのレグレッションテストをすべき変更かと特定し, 最初のリリース候補が出されるまでにいくつかの最悪なバグをつぶしてくれました.
他のコアコミッタも変更の多くを提供してくれ, AUTHORS に上げられている数多くの提供者から送られてきた パッチを適用してくれました.
そして言うまでもないことですが, Larry Wall に, 彼無しには私たちは Perl をもてませんでした.
もしバグと思われるものが見つかったら, comp.lang.perl.misc ニュース グループに最近投稿された記事や http://bugs.perl.org にある perl バグデータベースを確認してください. Perl ホームページ, http://www.perl.org にも情報はあります.
もしまだ報告されていないバグだと確信したら, そのリリースに含まれている
perlbug プログラムをを実行してください. バグの再現スクリプトを
十分小さく, しかし有効なコードに切りつめることを意識してください.
バグレポートは perl -V の出力と一緒に perlbug@perl.org に送られ
Perl porting チームによって解析されます. Perl 5 のバグについては
http://bugs.perl.org/ で閲覧及び検索することができます.
Changes には完全な変更箇所があります.
INSTALL には Perl をビルドする方法があります.
README には一般的な事項があります.
Artistic 及び Copying には著作権情報があります.
山科 氷魚 (YAMASHINA Hio) <hio@hio.jp>
原典: perl VERSION 5.8.9-RC1. 翻訳日: 2008-11-11.