perl584delta - perl v5.8.4 での変更点
このドキュメントは 5.8.3 リリースと 5.8.4 リリースの変更点を記述しています。
(互換性のない変更)
多くの細かいバグが修正されました。以前の間違った振る舞いに偶然にも 依存していたスクリプトはこれら修正が互換性のない変更と 考えるかもしれません:-)。このリリースを製品に組み入れる前に、 バグ修正が影響を与えないことを確認するために十分な受け入れテストを することをお勧めします。
Carp の診断出力がわずかに変更され、引数の間のカンマの後にスペースが 追加されました。これにより web ブラウザのようなツールが自動折り返しを 行うのがとても容易になりましたが、Carp の出力を詳細にパースする自動ツールを 混乱させるかもしれません。
内部ダンプ出力は改良され、改行やバックスペースと言った表示できない文字は
8 進数表記ではなく \x 表記になりました。
これは Devel::Peek といったモジュールの出力をパースする堅牢でない
ツールを混乱させるかもしれません。
(Core の拡張)
異常に大きなメモリブロックを確保しようとするのを検出するように ビルドできるようになりました。以前はこのような確保はサイズ計算時に 整数が桁あふれして間違った割り当てを引き起こしました。 これは perl をクラッシュさせ、理論的には「スタック破壊」攻撃に利用できました。 ラッピングのデフォルトは、これが動作すると知っているプラットフォーム (AIX のほとんどの設定, BSDi, Darwin, DEC OSF/1, FreeBSD, HP/UX, GNU Linux, OpenBSD, Solaris, VMS, ほとんどの Win32 コンパイラ)では有効、 それ以外のプラットフォームではデフォルトでは無効になっています。
Perl 5.8 に含まれている Unicode Character Database は 4.0.0 から 4.0.1 に 更新されました。
Paul Szabo は suidperl を解析し、知られている脆弱性を取り除くための
パッチを当てました。現在のところ suidperl に知られている脆弱性は
ありませんが、過去の経験から言うと、これがずっと続く自信はありません。
もはや set uid された perl を直接起動することはなく、
#!/usr/bin/suidperl を起動するスクリプトの過去互換性を維持するための
唯一の set uid されたバイナリは sperl5.8.n です
このリリースでは(sperl5.8.4)。
suidperl は perl のハードリンクとしてインストールされます;
suidperl と perl は両方とも set uid されたバイナリである
sperl5.8.4を起動します。従ってこの変更は完全に透過のはずです。
新しいプロジェクトのためには、suidperl よりむしろ、sudoのような専用で
単一目的のセキュリティツールを使うことをコア perl チームは強く勧めます。
バグ修正に加えて、format の機能が拡張されました。
perlform を参照して下さい。
(モジュールとプラグマ)
コアモジュールとドキュメントでの /tmp の(誤)使用は整理されました。
Perl コア内と独立した CPAN と両方に存在するモジュール
("dual-life modules")ではまだこれらの変更は適用されていません。
変更は CPAN のモジュールが更新された時点で将来の安定版リリースの perl に
統合されます。
(更新されたモジュール)
Linux 抽象 Unix ドメインソケットに実験的に対応しました。
CPAN バージョン 2.10 と同期しました。
syslog() はファシリティ名と優先度の指定に、文字列に加えて数値定数も
使用可能になりました。
Win32.pm/Win32.xs は libwin32 モジュールからコア Perl に移動しました。
detach されたスレッドが Windows でも対応されました。
(性能の向上)
Unicode 大文字/小文字マッピング(/i, lc, ucなど)が
高速化されました。
その場でのソート (@a = sort @a)が最適化されました。
以下のような不要な割り当てが最適化(除去)されるようになりました。
my $s = undef; my @a = (); my %h = ();
スカラコンテキストでの map が最適化されました。
(ツールの変更)
Perl デバッガ (lib/perl5db.pl) は後で利用するために全てのデバッガコマンドを 保存できるようになり、また与えられたクラスの親継承木を表示できるように なりました。
(インストールと設定の改良)
VMS と Windows でのビルドプロセスはいくつか細かい改良が行われました。 Windows Borland C コンパイラで、PerlIO と USE_LARGE_FILES を有効にして コンパイルできるようになりました。
Windows の perl.exe は「ラクダ」ロゴアイコンを持つようになりました。
Perl に関してラクダを使うことは O'Reilly and Associates Inc. の商標であり、
その許可の基に使用(ソースの配布、そこからの Windows 実行ファイルの
コンパイル、その実行ファイルのローカルでの使用)しています。
perl の実行ファイルのアイコンとして以外のこのラクダの使用については
含まれていないので、このアイコンと 共に perl バイナリを再配布したい人は
予め O'Reilly に直接確認するべきです。
Perl は Stratus VOS でもう一度クリーンにビルドできるべきです。
(バグ修正の抜粋)
より多くの utf8 バグが修正されました。特に
chomp, chop, send, syswrite と utf8 データとの相互作用が
修正されました。use bytes;スコープ内での文字連結が正しく
働くようになりました。
プラグマが正規表現の (?{...}) 構造の中に正しく伝播するようになりました。
my $x = qr{ ... (??{ $x }) ... };
のようなコードは use strict の環境では(正しく)失敗します
(内部の $x は常に $::x として扱われるからです)。
「無効コンテキストでの定数」警告は 5 || print; のような、
最適化によって除去される真偽値表現での定数に関しては
抑制されるようになりました。
ミスにより、perl -i が fchmod(stdin) できるようになっていました。
これは標準入力が端末に接続され、perl が root で実行されているときに
重大な問題でした。この問題は修正されました。
(新しい、または変更された診断メッセージ)
Carp と Devel::Peek で用いられている内部診断ルーチンは
/Incompatible Changes で記述されているようにより明確になりました。
(内部の変更)
ハッシュの内部表現に関するいくつかのバグが修正されました。 制限ハッシュとそのプレースホルダは少し異なるタイミングで割り当て及び 削除されますが、これはユーザーコードからは見えないはずです。
(将来の方向性)
次のメンテナンスリリース(5.8.5)は 2004 年 6 月 30 日にコードフリーズされ、 7 月中旬までにリリースされる予定です。
(プラットフォーム固有の問題)
このリリースは Windows 95 ではビルドできないことがわかっています。
もしバグと思われるものが見つかったら、 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 ファイルに著作権情報があります。