feature
プラグマsay()
$_
_
プロトタイプmro
readdir()
が"短いファイル名"を返すことがありますreadpipe()
がオーバーライド可能になりましたreadline()
のデフォルトの引数state()
変数pack()
及び unpack()
でのバイト順序修飾子no VERSION
chdir
, chmod
及び chown
kill()
unpack()
でのバイト/文字カウント機能$*
及び $#
変数は削除されましたsubstr()
の lvalue は固定長でなくなりました-f _
のパース:unique
version
オブジェクトになりますdefined()
内のデリファレンス(?p{})
は削除されましたPERL_DONT_CREATE_GVSV
sort()
の強化const
の使用AvFLAGS
は削除されましたav_*
の変更
perl5100delta - perl 5.10.0 の新機能
このドキュメントでは 5.8.8 リリースと 5.10.0 リリースとでの相異点を 説明します.
5.10.0 でのバグ修正の多くは既に 5.8.X メンテナンスリリースで見ることができます; それらはここには重複しないで, perl58[1-8]?delta の マニュアルページ群に記載しています.
feature
プラグマfeature
プラグマは Perl のこれまでのリリースとの
後方互換性がなくなってしまう新しい構文を有効にするために
使われます. これは strict
や warnings
と同様
レキシカルなプラグマです.
現在, 以下の新しい機能が提供されています:
switch
(switch 文を追加),
say
(say
組み込み関数を追加),
そして state
("静的な"変数を宣言するためのstate
キーワードを追加).
これらの機能はこのドキュメントのそれぞれのセクションに
記述されています.
feature
プラグマは必要な perl のバージョンを
5.9.5 以降で (use VERSION
構成子を使って) 要求したときにも
暗黙にロードされます.
詳細は feature を参照してください.
-E は -e と等価ですが,
暗黙にすべての追加できる feature を
有効にします(use feature ":5.10"
のように).
新しい演算子 //
(defined-or) が実装されました.
次の式:
$a // $b
単純に次の式と等価です,
defined $a ? $a : $b
そして次の文
$c //= $d;
は, 以下の代わりに使うことができます.
$c = $d unless defined $c;
//
演算子は ||
と同じ優先順位及び
結合性を持ちます.
この演算子が古いコードを壊さずに貴方の意図通りのことを行うことを保証するように
特別注意を払っていますが, 幾つかの空の正規表現を呼び出すエッジケースでは
異なったパースをしてしまうこともあります.
詳細は perlop を参照してください.
Perl 5 にも switch 文が実装されました.
use feature 'switch'
の影響下で利用することが
できます. この機能は3つの新しいキーワード,
given
, when
, 及び default
を導入します:
given ($foo) { when (/^abc/) { $abc = 1; } when (/^def/) { $def = 1; } when (/^xyz/) { $xyz = 1; } default { $nothing = 1; } }
Perl が switch 変数をどのように when
条件に
マッチさせるかのより詳細な説明は, Switch statements in perlsyn
にあります.
この種類のマッチは スマートマッチ と呼ばれ,
これは switch 文以外でも新しい ~~
演算子で使うことが
できます. Smart matching in detail in perlsyn を参照してください.
この機能は Robin Houston より寄稿されました.
再帰するパターンを (??{})
を使うことなく
記述できるようになりました.
この新しい方法はより効率的で, 多くの場合可読性にも
優れています.
それぞれのキャプチャ括弧は,
(?PARNO)
構文を使って突入できる
独立したパターンとして扱われます
(PARNO
は "parenthesis number (括弧番号)" を
表します).
例えば, 以下のパターンはネストしたバランスのとれた角括弧にマッチします:
/ ^ # start of line ( # start capture buffer 1 < # match an opening angle bracket (?: # match one of: (?> # don't backtrack over the inside of this group [^<>]+ # one or more non angle brackets ) # end non backtracking group | # ... or ... (?1) # recurse to bracket 1 and try it again )* # 0 or more times. > # match a closing angle bracket ) # end capture buffer one $ # end of line /x
PCRE ユーザは, PCRE の再帰はアトミック若しくは自然に "強欲"ですが, Perl の再帰正規表現の機能は 再帰されたパターンの中へのバックトラックを許している という点に気をつけてください. 上に書いた例のように, この振る舞いを選んで使いたいときには (?>) を 加えることで制御できます.
パターンにおいて名前付きのキャプチャ括弧と
キャプチャされた内容への名前による参照ができるように
なりました. 名前をつける構文は (?<NAME>....)
です.
名前をつけたバッファへの後方参照は \k<NAME>
構文によって
行えます. コード中では, キャプチャされたバッファの内容に
アクセスするために新しいマジカルハッシュ %+
及び
%-
が使えるようになります.
これによって, すべての連続する文字を1文字に置き換えるのに次のように 書くことができます
s/(?<letter>.)\k<letter>/$+{letter}/g
%+
ハッシュには内容の決定したバッファのみが
"見える"ようになるので, 次のようにすることができます
foreach my $name (keys %+) { print "content of buffer '$name' is $+{$name}\n"; }
%-
ハッシュはもう少し複雑です,
これには名前のついているすべてのキャプチャバッファの
値を複数あったとしても保持している配列リファレンスを含んでいます.
%+
及び %-
は新しいモジュール
Tie::Hash::NamedCapture
に tie されたハッシュとして
実装されています.
.NET 正規表現にさられてきたユーザは, perl の実装が "まずは名前なし, それから名前付き"ではなく 順番になっていることに気付くでしょう. 従って次のパターンにおいて
/(A)(?<B>B)(C)(?<D>D)/
$1 は 'A', $2 は 'B', $3 は 'C' そして $4 は 'D' になり, .NET プログラマが予期したような $1 が 'A', $2 が 'C' そして $3 が 'B' そして $4 が 'D' にはなりません. これは仕様と考えています. :-) (Yves Orton)
Perl は "アトミックマッチ"パターンの
"強欲な量指定子"構文をサポートしました.
基本的に強欲な量指定子は可能なだけ多くにマッチし,
そして後退しません. 従ってこれはバックトラックの制御に
使うことができます. その構文は貪欲でないマッチと似ていますが,
修飾子として '?' の代わりに '+' を使います.
従って, ?+
, *+
, ++
, {min,max}+
は正しい
量指定子になります. (Yves Orton)
正規表現エンジンはいくつかの特殊な目的のための バックトラック制御記号をサポートします: (*THEN), (*PRUNE), (*MARK), (*SKIP), (*COMMIT), (*FAIL) 及び (*ACCEPT). これらの説明は perlre を 参照してください. (Yves Orton)
新しい構文 \g{N}
若しくは \gN
("N" は10進整数)
によって相対的な後方参照と同様の安全な形式での
後方参照ができるようになりました. これによって後方参照を含んだ
パターンの生成がより簡単に行えるようになります.
Capture buffers in perlre を参照してください. (Yves Orton)
\K
エスケープJeff Pinyan によるモジュール Regexp::Keep の機能が
コアに追加されました. これによって正規表現内で
可変長の正の後読みの言明のようなものとして
特殊なエスケープ \K
を使うことができます.
これは次のような置換で便利です:
s/(foo)bar/$1/g
これは次のように書き換えることができ
s/foo\Kbar//g
これはより効率的です. (Yves Orton)
正規表現は \v
及び \h
エスケープを認識するようになりました,
これらはそれぞれ垂直及び水平白空白にマッチします.
\V
及び \H
はその補集合に論理的にマッチします.
\R
は一般的な行区切りにマッチします,
つまり, 垂直白空白, それと複数文字のシーケンス "\x0D\x0A"
です.
say()
say()
は新しい組み込み関数で, これは use feature 'say'
の
影響下でのみ提供され, print()
とにていますが
出力される文字列に改行を暗黙に追加します.
say in perlfunc を参照してください. (Robin Houston)
$_
デフォルト変数 $_
を他のレキシカル変数と同じように
次のように宣言することでレキシカルにできるようになりました
my $_;
デフォルトで $_
を使う演算子はレキシカルな
$_
があれば, グローバルな $_
の代わりに
それを使うようになります.
map
若しくは grep
ブロックでは,
$_
が先に my されていたら内側のブロックでも
同じようにレキシカルです(そしてそのブロックのスコープです).
$_
がレキシカル化されたスコープでは,
$::_
によって, 若しくは, より簡単に, our $_
で
レキシカル宣言を上書きすることで
グローバル版の $_
に アクセスすることができます. (Rafael Garcia-Suarez)
_
プロトタイプ新しいプロトタイプ文字が追加されました.
_
は $
と等価ですが, 対応する引数が渡されなかったときに
デフォルトで $_
をとるようになります.
($
も _
も共にスカラーを意味します.)
省略可能な引数として, これはプロトタイプの最後か,
セミコロンの前でのみ使うことができます.
これは小さな非互換を生じます:
prototype()
関数はいくつかの適応する組み込み関数で
_
を返すようになります(例えば prototype('CORE::rmdir')
).
(Rafael Garcia-Suarez)
UNITCHECK
は BEGIN
, CHECK
, INIT
そして END
に加えて新しく導入された特殊コードブロックです.
いくつかの特殊な目的で便利な CHECK
及び INIT
ブロックは
常にメインプログラムのコンパイルと実行の間で実行され,
従ってこれは実行時にロードされるコードには役に立ちません.
これに対して, UNITCHECK
はそれが定義されている単位が
コンパイルされた直後に実行されます.
詳細な情報は perlmod を参照してください. (Alex Gough)
mro
新しいプラグマ, mro
(Method Resolution Order;
メソッド解決順序)が追加されました.
これを使うことで複数の継承階層がある場合に
perl が継承されたメソッドを探索するときに使うアルゴリズムを
クラス毎に切り替えることができます.
デフォルトの MRO は変更されません(DFS; Depth First Search,
深さ優先探索). 提供されている MRO にはもう一つ,
C3 アルゴリズムがあります.
より詳しい情報は mro を参照してください. (Brandon Black)
クラス階層探索の実装変更に伴って,
*ISA
グロブを undef していたコードは
恐らく動かないことに注意してください.
*ISA
を undef することは @ISA 配列の magic を
削除してしまう副作用を発生させるため, まず第一に
それをするべきではありません.
また, *::ISA::CACHE::
はもはや存在しません; @ISA キャッシュを
強制的にリセットしたいときには mro
API を使うか,
より巻単位は @ISA に代入を行う必要があります (例えば @ISA = @ISA
).
readdir()
が"短いファイル名"を返すことがあります長いファイル名(long filename)が ANSI コードページ外の
文字を含んでいる時に readdir()
関数は "短いファイル名
(short filename)" を返すことがあります. 同様に,
Cwd::cwd() もまた短いディレクトリ名を, そして glob()
も
短い名前を同様に返すことがあります. NTFS ファイルシステム
上であればこれらの短い名前は常に ANSI コードページで
表現されます. これは他のシステムドライバでは必ずしも
当てはまりません; 例えば FAT ファイルシステムは
短いファイル名を OEM コードページで格納しているので,
FAT ボリューム上のいくつかのファイルは ANSI API では
以前アクセスできないままです.
同様に, $^X, @INC, 及び $ENV{PATH} は全てのパスが (可能であれば)有効な ANSI コードページで表現されたパスと なるように起動時に前処理されます.
Win32::GetLongPathName() 関数は置換文字を使って名前を強制的に ANSI コードページとするのではなく, UTF-8 エンコードされた 正しい長いファイル名を返すようになります. 新しい WIn32::GetANSIPathName() 関数は長いパス名が ANSI コードページで表現できないときにのみ, 長いパス名を短いパス名へと変換するために使うことができます.
Win32
モジュールの他の多くの関数は
UTF-8 エンコードされた引数を受け取ることができるように
改善されました. 詳細は Win32 を参照してください.
readpipe()
がオーバーライド可能になりました組み込み関数 readpipe()
がオーバーライド可能になりました.
これによってこれに対応する演算子, qx//
(a.k.a. ``
)
もオーバーライドすることができます.
さらに, これは引数が渡されなかったときに $_
を
デフォルトの引数とするようになりました. (Rafael Garcia-Suarez)
readline()
のデフォルトの引数readline()
は引数が渡されなかったときにデフォルトの
引数として *ARGV
をとるようになりました. (Rafael Garcia-Suarez)
state()
変数新しい変数の分類が導入されました.
state 変数は my
変数とにていますが,
my
の代わりに state
キーワードを使って宣言します.
変数はそのレキシカルスコープで見ることができますが,
my
変数とは異なりその値は維持され,
スコープに入ったときに未定義にされる代わりに以前の値を
再び得ます. (Rafael Garcia-Suarez, Nicholas Clark)
state 変数を使うためには次の文で
use feature 'state';
若しくはワンライナーであれば -E
コマンドラインスイッチ
を使うことでそれを有効にする必要があります.
Persistent Private Variables in perlsub を参照してください.
新しい構文糖として, ファイルテスト演算子を
積み重ねることができるようになりました.
-x $file && -w _ && -f _
の意味で
-f -w -x $file
と一列にかけるようになりました.
-X in perlfunc を参照してください.
UNIVERSAL
は新しいメソッド, DOES
を持つようになりました.
これは isa()
メソッドでの意味的(sematic)な
問題を解決するために追加されました.
isa()
は継承を調べますが,
DOES()
はモジュールの作者が(継承に加えて)
クラス間の他の関係を使う場合に上書きするために
設計されています. (chromatic)
UNIVERSAL/$obj-DOES( ROLE )> を参照してください.
フォーマットはいくつかの点で改善されました.
可変幅, 一回で一行?(one-line-at-a-time)のテキストのために
新しいフィールド ^*
が使えるようになりました.
picture 行で Null 文字が正しく処理されるようになりました.
@#
と ~~
の併用はこれらの整形フィールドに互換がないため
コンパイルエラーを生成するようになりました.
perlform も改善され, 雑多なバグが修正されました.
pack()
及び unpack()
でのバイト順序修飾子多くの pack()
及び unpack()
テンプレート文字及び
グループでそのタイプ若しくはグループに対して特定の
バイト順序を強制するための2つの新しいバイト順序修飾子,
>
(ビッグエンディアン) 及び
<
(リトルエンディアン) が追加されました.
詳細は pack in perlfunc 及び perlpacktut を参照してください.
no VERSION
no
のバージョン番号を続けることで, 指定したバージョンより
古いバージョンの perl を使いたいこと表現できるように
なりました.
chdir
, chmod
及び chown
chdir
, chmod
及び chown
はシステムでぞれぞれ
fchdir
, fchmod
及び fchown
がサポートされいたら
ファイル名と同様にファイルハンドルでも動作するように
なりました, Gisle Aas から提供されたパッチに感謝します.
$(
及び $)
は OS から返された順番でグループを
返すようになりました, Gisle Aas に感謝します.
これは以前はそうなっていませんでした.
sort()
で再帰する関数を使えるようになりました,
Robin Houston に感謝します.
定数畳み込み処理が例外ハンドラで保護されるようになりました, そして畳み込み時に例外が発生したときには(例えば 0/0 を 評価しようとした場合), perl はプログラム全体をアボート させるのではなく現在の optree を維持するようになります. この変更がないと, プログラムないに例外を生成する式が 含まれていた場合, たとえそれが実行時に処理が通らない 場所であったとしてもコンパイルできません. (Nicholas Clark, Dave Mitchell)
@INC での関数フックメカニズムに於いて, フックから返された開いているファイルハンドルの先頭に ソースフィルタを加えることで強化できるようになりました. この機能はだいぶ以前から計画されていましたが, これまであまり作業されていませんでした. 詳細は require in perlfunc を参照してください. (Nicholas Clark)
${^RE_DEBUG_FLAGS}
この変数は use re "debug"
で実行されている時に
その正規表現エンジンで影響を持っているデバッグフラグを
制御します. 詳細は re を参照してください.
${^CHILD_ERROR_NATIVE}
この変数は最後の pipe close, バックティックコマンド,
wait()
若しくは waitpid()
の成功した呼び出し,
若しくは system()
演算子から返されたネイティブなステータスを
与えます.
詳しくは perlvar を参照してください。
(Gisle Aas によって寄贈されました。)
${^RE_TRIE_MAXBUF}
${^WIN32_SLOPPY_STAT}
unpack()
はデフォルトで $_
変数を unpack するように
なりました.
引数の無い mkdir()
は $_
をデフォルトと
するようになりました.
内部ダンプ出力が改善されました, これによって改行やバックスペースといった
表示できない文字は8進数でなく \x
記法で出力されるようになります.
-C オプションは #!
行で使えなくなりました.
どのみち, 標準入出力は perl インタプリタの実行に於いて
その時点では既にセットアップ済みであるためそこでは動作しません.
その振る舞いを希望する代わりに binmode()
を使ってください.
Perl 5 に含まれているユニコード文字データベースは バージョン 5.0.0 にアップデートされました.
MAD (Miscellaneous Attribute Decoration)は Perl 5 から Perl 6 への
コンバータに向けて今だ開発継続中です.
これを有効にするには Configure の引数に -Dmad
を渡す必要があります.
これによって得られる perl は通常の perl 5.10 とのバイナリ互換性が
ありません, そして空間と速度ともにペナルティをとります;
それに加えてまだパスできていないレグレッションテスとが残っています.
(Larry Wall, Nicholas Clark)
kill()
Windows プラットフォームにおいて, kill(-9, $pid)
は
プロセスツリーを kill するようになります.
(UNIX ではこれは同じプロセスグループに属するすべてのプロセスに
シグナルを伝達します.
UTF-8 エンコードされたデータにおける pack()
及び unpack()
のセマンティクスが変更されました. 処理はデフォルトで
基礎となっているエンコーディングにおいて
バイト毎ではなく文字毎になりました.
特に, 文字列のエンコーディングを通して見るために
pack("a*", $string)
といったかんじで使っているコードは
単純にオリジナルの $string を得るようになります.
アップグレードされている文字を格納したときには
pack された文字列もまたアップグレードされています.
use bytes
を使うことで以前の振る舞いをとることもできます.
pack()
と同じように, unpack()
での C0
テンプレートも
文字モードで, つまり文字毎に処理されることを示します;
これに対して unpack()
での U0
は pack された文字列が
バイト毎の処理を基盤とした環境での UTF-8 エンコードされた
ユニコード形式で処理されたと, UTF-8 モードを示します.
これは perl 5.8.X と逆になりますが,
これによって pack()
と unpack()
での矛盾が解消されます.
さらに, pack()
での C0
及び U0
はそれぞれ文字及び
バイトモードのテンプレートとなります.
pack 及び unpack フォーマットの途中にある C0
及び U0
は
括弧グループに於いての
指定されたエンコーディングモードへの切り替えとなります.
これまでは, 括弧は無視されていました.
また, 新しい pack()
文字形式, W
が追加されました,
これは以前の C
の置き換えを意図しています.
C
は文字列の内部表現でのバイト列を unsigned char 列で
保持します. W
は符号なし(論理)文字の値を表現し,
これは 255 より大きい値もとれます. これによって
UTF-8 エンコードされているかもしれないデータに対して
より強靱になります(C
は文字エンコーディングを
考えないので 0..255 の範囲外の値は wrap してしまします).
実際のところ, これは pack フォーマットが C
以外は
エンコーディング対応になったことを意味します.
一貫性のために, unpack()
での A
フォーマットは
文字列の末尾のすべてのユニコード白空白を取り除く
ようになりました. perl 5.9.2 以前では,
伝統的な ASCII 空白文字のみを取り除いていました.
unpack()
でのバイト/文字カウント機能新しい unpack()
テンプレート文字, "."
,
これはそれまでに読み込まれたバイト数若しくは文字数を返します
(選択されているエンコーディングモードに依る, 前述).
$*
及び $#
変数は削除されました/s
及び /m
正規表現修飾子が導入されたことで
非推奨となっていた $*
は削除されました.
非推奨となっていた $#
変数 (数値の出力形式)は
削除されました.
(編注: 配列の最後の添字を取得する $#VAR ではないです)
2つの厳しい警告, $#/$* is no longer supported
が
追加されました.
substr()
の lvalue は固定長でなくなりました3引数形式の substr()
から返される lvalue 値は
オリジナルの文字列での"固定長のウィンドウ"を持っていました.
いくつかのケースにおいてこれは離れた場所でのびっくりする動作や
他の未定義な振る舞いとなっていました.
このウィンドウの長さはそれに代入された文字列の長さに
調整されるようになりました.
(編注:$x="1234";$y=(substr($x,1,2)="ABCD");
とした時,
これまでは $x="1ABCD4", $y="AB"
となっていたけれど,
5.10 以降は $x="1ABCD4", $y="ABCD"
になる.)
-f _
のパース識別子 _
は, ファイルテスト演算子の後ではベアワードとして
強制されるようにありました. これはグローバルな _
関数が
定義されている時の misparsing な動作を改善します.
:unique
:unique
アトリビュートは no-op になりました,
この現在の実装が本質的に問題がある上にスレッドセーフで
ないためです.
%^H
ヒント変数のコンパイル時の値は eval("") されたコードにも
伝播するようになりました. これはレキシカルプラグマを実装するのに
より一層役立ちます.
この副作用として, 定数のオーバーロードされ具合も eval("") に 伝播するようになりました.
chdir()
へのベアワード引数はファイルハンドルとして
認識されるようになりました. これまでのリリースでは
ベアワードはディレクトリ名として処理されていました.
(Gisle Aas)
perl の古くからある機能で, require
若しくは use
は
.pm 拡張子のファイルを探す前に, まず同じファイル名で .pmc の
拡張子のファイルを探していました. これが見つかったとき,
存在しているかもしれない .pm 拡張子で終わるファイル代わりに
ロードされるようになります.
これまででは, .pmc ファイルはそれが .pm ファイルより 新しい時にのみロードされていました. 5.9.4 からはこれは存在していれば常にロードされるようになります.
version
オブジェクトになります$^V は printf における %vd
形式で使うことができますが,
文字レベルでの操作は version
オブジェクトの
文字列表現へのアクセスとなり, v-string のではありません.
substr($^V, 0, 2)
や split //, $^V
といった式はもはや動作せず, 書き直さなければなりません.
特殊配列 @-
及び @+
はもはや正規表現の中に入り込んで(interpolate)
いません. (Sadahiro Tomoyuki)
もし taint されたている名前で関数を呼び出した時, そしてそれが AUTOLOAD 関数にゆだねられた時, $AUTOLOAD は(適切に) taint される用になります. (Rick Delaney)
perl が taint モードで実行されている時, printf()
及び
sprintf()
は taint された書式引数を拒否するようになります.
(Rafael Garcia-Suarez)
シグナルハンドラの undef $SIG{FOO}
による未定義化
若しくは削除は 'DEFAULT'
の設定と等価になります. (Rafael Garcia-Suarez)
defined()
内のデリファレンスuse strict 'refs'
は次のような defined()
の引数でのハードリファレンスを
無視していました:
use strict 'refs'; my $x = 'foo'; if (defined $$x) {...}
これは適切に実行時エラー Can't use string as a SCALAR ref while
"strict refs" in use
("struct refs" の影響下では文字列を SCALAR
リファレンスとして使うことは出来ません)を生成するようになります.
defined @$foo
及び defined %$bar
は strict 'refs'
にも従うようになります(つまり $foo
及び $bar
はその場所において
適切なリファレンスであるべきです). (defined(@foo)
及び
defined(%bar)
は推奨されない形ですが.) (Nicholas Clark)
(?p{})
は削除されましたperl 5.8 で非推奨となっていた正規表現構築子 (?p{})
は
削除されました. かわりに (??{})
を使うようにしてください. (Rafael Garcia-Suarez)
仮想ハッシュのサポートは Perl 5.9 から削除されました.
(fields
プラグマは引き続き残りますが, 違う実装を使っています).
perlcc
, バイトローダ及びそのサポートモジュール(B::C, B::CC,
B::Bytecode, etc.)は perl ソースと一緒には配布されなくなりました.
これらの実験的なツールは信頼した動作を行えず, そして,
perl インタプリタの開発ラインに於いてそれを維持するボランティアの
不足により, 壊れたバージョンを送り出すよりは削除されることとなりました.
最後のバージョンは perl 5.9.4 にあります.
とはいっても B コンパイラフレームワークは, それによって可能となる 便利なモジュール(とりわけ B::Deparse 及び B::Concise)と共に perl コアでのサポートが継続されます.
JPL (Java-Perl Lingo) は perl ソース tarball から削除されます.
Perl はどこかのパッケージで再帰継承となる @ISA
の変更を
行うと直ぐに例外を投げるようになります.
これまでは, Perl がメソッドの解決や $foo->isa($bar)
の
探索を行うために再帰継承を使おうとするまでは例外は発生していま
せんでした.
より多くのコアモジュールが CPAN を通して分離しても提供されています.
もしこれのらのモジュールのうち一つをアップデートしたいのであれば,
新しい perl のリリースを待つ必要はありません.
cpan シェルから, 'r' コマンドを実行することでアップグレードの
提供されているモジュールが一覧されます.
詳細は perldoc CPAN
を参照してください.
feature
新しいプラグマ feature
は古いコードが動かなくなるかもしれない
新しい機能を有効にするために使われます. 前述の The feature
pragma
を参照してください.
mro
この新しいプラグマは継承されたメソッドを解決するのに使う
アルゴリズムの変更を可能にします. 前述の New Pragma, mro
を
参照してください.
sort
プラグマのスコープsort
プラグマはレキシカルスコープになります.
この影響はかつてはグローバルでした.
bignum
, bigint
, bigrat
のスコープ3つの数値関連のプラグマ bignum
, bigint
及び bigrat
は
レキシカルスコープになります. (Tels)
base
base
プラグマはあるクラスがそれ自身を継承しようとした時に
警告をするようになります. (Curtis "Ovid" Poe)
strict
及び warnings
strict
及び warnings
は大文字小文字が不適切な形で
ロードされると(例えば use Strict;
)大声で訴えるように
なります. (Johan Vromans)
version
version
モジュールは version オブジェクトのサポートを提供します.
warnings
warnings
プラグマは Carp
をロードしなくなります.
これによってコンパイル時に Carp
のルーティンをロードすることなく
使っていたコードは調整する必要があります; 典型的には,
次のような(間違った)コードは動作しなくなり, 関数名の後に括弧をつける
必要があります:
use warnings; require Carp; Carp::confess 'argh';
less
less
は便利な何かを行うようになります(若しくは少なくとも
行おうとはします). 実際に, これはレキシカルプラグマです.
なので, 貴方のモジュールに於いて, ユーザがより少ない CPU,
メモリ, 魔法, さらには脂肪分を要求しているのかどうかを
チェックすることができます. 詳細は less を参照してください.
(Joshua ben Jore)
encoding::warnings
, Audrey Tang による因る, 高位ビットを含んだ
バイトを含んでいる ASCII 文字が暗黙に UTF-8 に変換された時に
警告を発行するモジュール. Perl 5.9.4 以降であればレキシカルプラグマ,
それより古い perl ではグローバルです.
Module::CoreList
, Richard Clamp に因る, Perl 5 の任意のバージョンで
コアモジュールのバージョンを教えてくれる小さなハンディモジュール.
コマンドラインフロントエンド, corelist
と共に.
Math::BigInt::FastCalc
は XS を使った, それによって高速になったバージョンの
Math::BigInt::Calc
です.
Compress::Zlib
は zlib 圧縮ライブラリのインターフェースです.
zlib のバンドル版と共に導入されます, その為動作する zlib を
インストールのために前もって準備する必要はありません.
これは Archive::Tar
から利用されます(後述).
IO::Zlib
は IO::
-スタイルの Compress::Zlib
への
インターフェースです.
Archive::Tar
は tar
アーカイブを操作するための
モジュールです.
Digest::SHA
は多くの種類の SHA ダイジェストを計算するための
モジュールです, CPAN モジュールの SHA サポートのために
導入されました.
ExtUtils::CBuilder
及び ExtUtils::ParseXS
が
追加されました.
Hash::Util::FieldHash
, Anno Siegel による. このモジュールは
フィールドハッシュ のサポートを提供します: これは
値への参照の関係をスレッドセーフでガーベージコレクトされる方法で
管理するハッシュです.このようなハッシュは inside-out オブジェクトを
実装するのに便利です.
Module::Build
, Ken Williams に因る. これは perl モジュールを
ビルド及びインストールするための ExtUtils::MakeMaker
の別バージョンです.
Module::Load
, Jos Boumans に因る. これは Perl モジュール
及び .pl ファイルをロードするための一つのインターフェースを提供します.
Module::Loaded
, Jos Boumans に因る. モジュールがロードされているのか
アンロードされているのかをマークするために使われます.
Package::Constants
, Jos Boumans に因る. これは
指定したパッケージの中で宣言されている全ての定数を一覧にする
ための簡単なヘルパーです.
Win32API::File
, Tye McQueen に因る (Windows ビルド時).
このモジュールはファイル/ディレクトリのための Win32 システム API 呼び出し
への低レベルなアクセスを提供します.
Locale::Maketext::Simple
, CPANPLUS に必要, これは
Locale::Maketext::Lexicon
の簡単なラッパです.
Locale::Maketext::Lexicon
は perl コアには含まれていない点に注意してください;
それが提供されていない場合 Locale::Maketext::Simple
の振る舞いは
著しく低下します.
Params::Check
は汎用的な入力のパース/チェックメカニズムを
実装しています. これは CPANPLUS で使われています.
Term::UI
はターミナルのプロンプトで質問をするタスクを
単純にします.
Object::Accessor
はオブジェクト毎のアクセサを作るための
インターフェースを提供します.
Module::Pluggable
はプラガブルなサブモジュールを扱える
モジュールを作るための簡単なフレームワークです.
Module::Load::Conditional
はインストールされているモジュールを
問い合わせる, そして恐らくロードするための
簡単な方法を提供します.
Time::Piece
は組み込みの localtime()
及び gmtime()
を
オーバーライドして時間関数へのオブジェクト指向なインターフェースを提供します.
IPC::Cmd
はおそらくはインタラクティブに外部コマンドを
探索そして実行することを手助けします.
File::Fetch
は汎用的なファイル fetch メカニズムを提供します.
Log::Message
及び Log::Message::Simple
は
CPANPLUS
のログ機能に使われてます.
Archive::Extract
は .tar (単なるそれ, gzip, 若しくはbzip)
若しくは .zip ファイルのアーカイブを展開する汎用的な
メカニズムです.
CPANPLUS
は CPAN ミラーへアクセスするための
API 及びコマンドラインツールを提供します.
Pod::Escapes
は Pod の E<...> シーケンスを
デコードする便利なユーティリティを提供します.
Pod::Simple
は Perl に含まれるいくつかの Pod 関連のモジュール
のバックエンドになりました.
Attribute::Handlers
Attribute::Handlers
は呼び出し元のファイル及び行番号を
報告てきるようになりました. (David Feldman)
全ての処理された属性は配列リファレンスとして渡されるように なりまshちあ. (Damian Conway)
B::Lint
B::Lint
は Module::Pluggable
を基底とするようになりました,
これによってプラグインで拡張できるようになりました. (Joshua ben Jore)
B
レキシカルプラグマヒント(%^H
)に
B::COP::hints_hash() メソッドを使うことでアクセスできるようになりました.
これは B::RHE
オブジェクトを返し, さらに B::RHE::HASH() メソッドを
通してhハッシュリファレンスを取得するために使うことができます.
(Joshua ben Jore)
Thread
古い 5005thread スレッドモデルは削除されました,
ithread スキームによって, Thread
モジュールはそれを使っている
古いコードのみのための互換ラッパになります. これはダイナミック
拡張のデフォルトリストから削除されます.
Perl デバッガは後で利用するための全てのデバッガコマンドを 保存するようになりました; とりわけ, リスタートしてこの保存されたコマンド履歴から 最後のコマンドの前まで再度実行することで, 後退をエミュレートできるように なりあした.
また与えたクラスの親継承ツリーを i
コマンドで表示できるように
なりました.
ptar
は tar
のピュアperl実装です, Archive::Tar
と共に
導入されます.
ptardiff
は tar アーカイブとディレクトリツリーとの内容の diff を
とるための小さなユーティリティです, Archive::Tar
と共に
導入されます.
shasum
は SHA ダイジェストを表示, 若しくは検証するための
コマンドラインユーティリティです. Digest::SHA
モジュールと共に
導入されます.
corelist
ユーティリティが perl と共にインストールされるように
なります(New modules 参照).
h2ph
及び h2xs
は"今風の" C コードを出力することで
より強靭になります.
h2xs
に後方互換モジュールであっても XSLoader
の使用を
強制させる --use-xsloader
オプションが新しく実装されます.
アポストロフィを含んだ作者名の処理が修正されました.
負の値の enum シンボルはスキップされるようになりました.
perlivp
はデフォルトで *.ph をチェックしなくなりました.
全てのテストを実行するには新しく出来た -a
オプションを
使うようにしてください.
find2perl
は -print
をデフォルトの動作とするようになりました.
これまではこれを明示的に指定する必要がありました.
-exec
及び -eval
に関する find2perl
の幾つかのバグは修正
されました. またオプション -path
, -ipath
及び -iname
が
追加されました.
config_data
は Module::Build
と共に導入される新しい
ユーティリティです. これは Module::Build の設定フレームワーク
(つまり, その親モジュールのためのローカル設定情報を *::ConfigData
が
持つ)を使っている Perl モジュールの設定のためのコマンドライン
インターフェースを提供します.
cpanp
CPANPLUS シェルが追加されました.
(CPANPLUS 操作のためのヘルパ, cpanp-run-perl
, も追加されていますが,
これは直接の利用を意図しているものではありません).
cpan2dist
は CPANPLUS と共に導入される新しいユーティリティです.
これは CPAN モジュールから配布物(若しくはパッケージ)を作るための
ツールです.
pod2html
の出力が CSS でカスタマイズでよりカスタマイズ
できるように強化されました.
幾つかの整形上の問題も修正されました. (Jari Aalto)
perlpragma マニュアルページには自分用の レキシカルプラグマを Perl のみで書く方法が記載されています (これは 5.9.4 から可能です).
perlglossary は Perl ドキュメントで使われている技術的, 及びその他の 単語の用語集です, 親切な O'Reilly Media, Inc. から提供されました.
Yves Orton の好意による perlreguts マニュアルページには Perl 正規表現エンジンの内部が記述されています.
perlreapi マニュアルページにはプラガブルな 正規表現エンジンを書くための perl インタプリタへの インターフェースが記述されています. (by Ævar Arnfjörð Bjarmason).
perlunitut マニュアルページは Perl での Unicode 及び 文字列エンコーディングを使ったプログラミングのための チュートリアルです, Juerd Waalboer の好意によります.
perlunifaq (Perl Unicode FAQ) が追加されました (Juerd Waalboer).
perlcommunity マニュアルページではインターネット上及び 実生活上での Perl コミュニティについての説明がされています. (Edgar "Trizor" Bering)
CORE マニュアルページには CORE::
名前空間について記述されています.
だいぶ前から存在していた /(?{...})/
正規表現が
$_
及び pos()
を設定する機能がドキュメント化されました.
配列のインプレースなソート (@a = sort @a
) は
配列の一時的な複製を作らないよう最適化されるようになりました.
同じように, reverse sort ...
も一時的な中間リストの生成を押さえて
逆順にソートするように最適化されました.
0 から 255 の間で数値定数によってレキシカルな配列の要素に アクセスするのが高速になりました. (これはグローバルな配列でのみ行われていました)
Unicode 属性及び変換マップを取得するために使われていた幾つかのpure-perlコードは XS で再実装されました.
インタプリタ内部に於いてよりメモリ効率の良いインライン定数の形式が サポートされました. シンボルテーブルに定数のリファレンスを格納すると, それは定数関数を参照する完全なタイプグロブと等価ですが, およそ 400 バイトメモリを節約します. この代理定数関数は 必要であれば関数を持った実際のタイプグロブに 自動的にアップグレードされます. ここで採用しているアプローチは, 関数スタブの宣言で使われている, 完全なタイプグロブの代わりに プレインなスカラーを格納するという既存の空間最適化と似たものです.
幾つかのコアモジュールがシステムに依存する定数において
この機能を使うように変換されました - この結果
use POSIX;
はおよそ 200K 程メモリ消費が削減されました.
PERL_DONT_CREATE_GVSV
perl 5.8.8 で任意として導入された新しいコンパイルフラグ
PERL_DONT_CREATE_GVSV
は perl 5.9.3 からデフォルトで使われるように
なりました. これは新しいタイプグロブに対して空のスカラーを生成していたのを
抑制するようになります. 詳細は perl589delta を参照してください.
Nicholas Clark の好意により, 弱い参照は O(n) ではなく O(1) で作成できるようになりました. 削除は O(n) のままですが, 削除がプログラムの終了でのみ発生するのなら, これは完全にスキップされます.
sort()
の強化Salvador Fandiño は sort
のメモリ抑制と幾つかのケースでの
高速化の実装を提供してくれました.
幾つかの内部データ構造(タイプグロブ, GV, CV, フォーマット)は メモリ効率が良くなるよう再構成されました. (Nicholas Clark)
UTF-8 キャッシュを行うコードがより効率的になり, より使われるようになりました. (Nicholas Clark)
Windows において, perl の stat()
関数はリンク数を調べるため及び
ハードリンクによって属性が変更されていないかを調べるために
通常はファイルをオープンしています. ${^WIN32_SLOPPY_STAT} を
真にするとこの処理を抑制することで stat()
の速度が改善します.
(Jan Dubois)
正規表現エンジンは再帰を行わなくなりました, これによってスタックを使い果たしていたようなパターンは もっと役に立つ説明を伴って die するか, ちゃんと実行できるように なりました, それらは以前であればスタックを打ちのめすことが できましたが, それにはとても長い時間がかかるでしょう. もしそのようなスタックあふれ(若しくはsegfault)を経験していて 今の perl もどうやらハングするらしいことを見つけたら, 悪化した正規表現を探してみてください. (Dave Mitchell)
1文字からなる文字クラスはリテラルと同じように扱われるように なりました, これはエスケープ代わりに文字クラスを 使っているようなコードで高速化となるでしょう. (Yves Orton)
代替は, 可能であれば, より効率的なマッチング構造へと 最適化されるようになりました. 文字列リテラル代替は トライへとメージされ, 同時にマッチが行われます. これはある地点で N 個の代替のマッチを行うのに O(N) かかっていたのに対し, 新しいコードでは O(1) で処理 されるようになります. 新しい特殊変数, ${^RE_TRIE_MAXBUF} が, この最適化を 調整するために追加されました. (Yves Orton)
補足: 代替において perl の経験的で貧弱な パフォーマンスに対処させているコードはたくさんあります. それを行うためにしばしば使われているトリックは 新しい最適化では効果がなくなるでしょう. 願わくば, この目的のために使われているユーティリティモジュールが 新しい最適化についての教育を受けますように.
パターンがトライ化可能な選択で始まっていてよりよい最適化が なかった場合, 正規表現エンジンは開始位置を探すために Aho-Corasick マッチを使います. (Yves Orton)
-Dusesitecustomize
@INC の実行時カスタマイズは Configure に
-Dusesitecustomize
を渡すことで有効になります.
これが有効になると, すべてに先立って $sitelibexp/sitecustomize.pl
を実行するようになります. このスクリプトで @INC に
追加の項目を加えるようなセットアップができます.
再配置可能な perl ツリーを作るための新しい Configure
サポートができました. -Duserelocatableinc
で Configure
を行うと, @INC (及び %Config にあるその他の全て)が
perl 実行形式のパスを通して配置することが任意でできるようになります.
これはつまり, パスの最初に ".../"
という文字列が
見つかったら, それが $^X のディレクトリで置換されます.
つまり, 再配置はディレクトリ単位で設定することができます,
けれども -Duserelocatableinc
のデフォルトでは全てが
再配置されます. 最初のインストールはオリジナルの
configure された prefix に行われます.
strlcat()
及び strlcpy()
configuration プロセスで strlcat()
及び strlcpy()
が
提供されているかを検出するようになりました.
これらが提供されていなかったときには, perl の
自分で持っているバージョンが使われます(Russ Allbery
のパブリックドメイン実装より).
perl インタプリタの様々な場所でこれらが使われるように
なりました. (Steve Peters)
d_pseudofork
及び d_printf_format_null
新しい設定変数, $Config{d_pseudofork}
が Config モジュールに
追加されました, これによって実際の fork()
のサポートを
Windows プラットフォームにおいて使われている疑似forkと
区別することができるようになります.
新しい設定変数 d_printf_format_null
が追加され,
これによって printf-ライクの書式で NULL が許されるかを
確認することができます.
Configure -h
はよく使われるオプションに
拡張されました.
並列 make が適切に動作するようになります,
けれども make test
は並列に実行されるとまだ問題があります.
Borland の Win32 でのコンパイラがよりスムーズに 動作するようになりました. 特に Steve Hay はそれらの コンパイラで発行される多くの警告と, 少なくとも1つの C コンパイラの内部エラーを取り除いてくれました.
Windows での Perl 拡張は Perl DLL に静的にビルドできるように なりました.
また, Win32 において Perl DLL に依存しない perl-static.exe
をビルドできるようにもなりました. 詳細は Win32 makefile群を
参照してください.
(Vadim Konovalov)
perl に同梱されている XS モジュールの全ての ppport.h ファイルは ビルド時に自動生成されるようになりました. (Marcus Holland-Moritz)
perl 及びコアとなる XS モジュールが様々な C++ コンパイラと 互換がとれるように取り組みが行われました(けれども テストされた幾つかのプラットフォームでの幾つかの コンパイラでは完全はありません)
Microsoft の 64-bit コンパイラでの perl ビルドの サポートが改善されました. (ActiveState)
Perl は Microsoft Visual C++ 2005 (及び 2008 Beta 2) で コンパイルできるようになりました.
全ての win32 ビルド (MS-Win, WinCE)は統合され, 整理されました.
perl に同梱されている CPAN モジュールの README ファイル及び changelog はもはやインストールされなくなりました.
Symbian OS での Perl の稼働が報告されました. 詳細は perlsymbian を参照してください.
z/OS で Perl を正しく動作させるようにする多くの改善が 行われました.
DragonFlyBSD 及び MidnightBSD での Perl の稼働が報告されました.
NexentaOS での Perl 動作報告も受けました ( http://www.gnusolaris.org/ ).
VMS ポートが改善しました. perlvms を参照してください.
Cray XT4 Catamount/Qk のサポートが追加されました. 詳細はソース配布物内の hints/catamount.sh を 参照してください.
RedHat 及び Gentoo のベンダーパッチがマージされました.
DynaLoader::dl_unload_file() が Windows でも 動作するようになりました.
strict
は regexp-eval ブロック (/(?{...})/
) には影響していませんでした.
CORE::require() 及び CORE::do() はオーバーライドされている時は
require()
and do()
に常にパースされていました. これは修正されました.
次のように, リストスライスの後は添字のチェインに矢印の無い形式を 使えるようになりました:
({foo => "bar"})[0]{foo}
これはこれまでは構文エラー; ->
が必要です(a ->
was required)
となっていました.
no warnings 'category'
は -w でも正しく動作するようになりましたこれまでは-w
によって全体的に警告が有効な状態で実行していると,
特定の警告カテゴリの選択的無効化は実際には全ての警告を
解除していました. これは修正されました; no warnings 'io';
は io
クラスに属する警告のみを解除するようになりました.
これまでは誤って全ての警告を解除していました.
ithreads における幾つかのメモリリークは収束しました. また, メモリ消費量具合が減少しました.
threads
はデュアルライフモジュールになり,
CPAN でも提供されるようになります.
これは多くの方法を展開します.
スレッドシグナルのために kill()
メソッドが提供されます.
これはスレッドの状態, 若しくは実行中若しくはjoin可能な
スレッドのリストを取得できます.
新しい threads->exit()
を使って,
アプリケーションを終了(メインスレッドでのデフォルト)若しくは
現在のスレッドのみを終了(それ以外の全てのスレッドでのデフォルト)が
行えるようになります. 一方, exit()
組み込み関数は,
常にアプリケーション全体を終了させるようになります.
(Jerry D. Hedden)
chr()
と負の値負の値での chr()
は \x{FFFD}
, Unicode 置き換え文字を
返すようになります, bytes
プラグマの影響下ではそうではなく,
下位 8 ビットの値が使われます.
Windows 環境において, PERL5SHELL 環境変数の taint 性が 確認されるようになります. (Rafael Garcia-Suarez)
stat()
及び -X
ファイルテストは *FILE ファイルハンドルのように
*FILE{IO} ファイルハンドルを扱います. (Steve Peters)
リファレンスが別のクラスへと bless し直された時でも オーバーロードが正しく動作するようになりました. 内部的には, これは"オーバーロードしている"フラグを リファレンスからリファレンスへと必要な場所で常に 移動していくことで実装しています. (Nicholas Clark)
文字列化をオーバーロードしているオブジェクトでの UTF-8 処理に関連する幾つかのバグが修正されました. (Nicholas Clark)
伝統的に, eval 'syntax error'
は悪いことにリークしていました.
多くの(けれども全てではない)これらのバグは除去若しくは軽減
されました. (Dave Mitchell)
これまでのバージョンにおいて, ランダム生成器の種をとる時に, /dev/urandom が存在していればそれを読んでいました. このファイルが Windows で運の悪いことに存在していても, それは恐らく適切なデータを含んでいないので, Windows では このファイルを読まないようになりました. (Alex Davies)
PERLIO_DEBUG
環境変数は setuid スクリプト及び
-T で実行されているスクリプトでは影響を持たなくなりました.
さらに, スレッドが有効な perl において,
PERLIO_DEBUG
の利用は内部的なバッファオーバーフローの
元となっていました. これは修正されました.
PerlIO::scalar は読み込み専用のスカラーに書き込まないように
なりました. さらに, PerlIO::scalar ベースのファイルハンドルで
seek()
がサポートされるようになりました, 元となっている文字列は
必要であればゼロで埋められます. (Rafael, Jarkko Hietaniemi)
study()
及び UTF-8study()
は UTF-8 文字列では動作しておらず, 間違った結果を
返すだけでした. これは UTF-8 データではなにもしないように
なりました. (Yves Orton)
SIGILL, SIGBUS 及び SIGSEGV の各シグナルは, 常に"安全でない"形式で配送されるようになります (perl インタプリタが安定した状態に達するまで 遅延させる他のシグナルとは異なります; Deferred Signals (Safe Signals) in perlipc を 参照してください). (Rafael)
@INC フックを通してモジュール若しくはファイルがロードされた時, 及びこのフックが %INC にファイル名を設定したとき, そのモジュールのための __FILE__ は %INC エントリの内容に即したものが 設定されます. (Rafael)
-t
スイッチの修正-w
及び -t
スイッチを一緒に使った時に
有効になる警告のカテゴリを失うこと無く使えるようになります. (Rafael)
:utf8
PerlIO レイヤを持っているファイルハンドルを
dup した時に dup されたファイルハンドルのレイヤにも
適切に運ぶようになります. (Rafael)
ハッシュの要素を変数をキーとして local 化したとき,
local()
の効果のあるうちにキーとした変数の値が
変更された時に(local $h{$x}; ++$x
のように)
正しく動作していませんでした. (Bo Lindbergh)
Perl は未定義だった変数の名前を(もしあれば)伝えようと 試みるようになります.
my()
の使用新しい廃止警告, Deprecated use of my() in false conditional
(廃止された, 到達しない条件下での my()
の使用)が追加されました,
これは曖昧で廃止された構築に対して警告します.
my $x if 0;
perldiag を参照してください. 代わりに state
変数を使ってください.
否定マッチ演算子のスペルミスを防止するために,
新しい警告, !=~ should be !~
, が発行されます.
警告 Newline in left-justified string は削除されました.
エラー Too late for "-T" option はより分かり易くするために 再編成されました.
この警告はより矛盾の無いケースで発行されます;
簡単に言うと, 呼び出される宣言は my
変数です:
my $x; my $x; # warns my $x; our $x; # warns our $x; my $x; # warns
一方,
our $x; our $x;
これは "our" variable %s redeclared
警告となります.
ディレクトリハンドルが使われているけれど閉じているか実際には ディレクトリハンドルでは無い時に これらの新しい警告が発行されます.
2つの廃止警告が追加されました: (Rafael)
Opening dirhandle %s also as a file Opening filehandle %s also as a directory
Perl のコマンドラインスイッチ -P
は廃止されます.
use VERSION
構文での潜在的な後方互換問題を警告するようになります.
perl -V
で幾つか改善があります,
シェルスクリプトから設定変数の値を取り出し易くしています.
詳細は perlrun を参照してください.
一般的に, perl のソースコードは様々な場所でリファクタリングされ, 整頓され, そして最適化されました. また, メモリ管理及び 確保は幾つかの点で改善されました.
perl コアを gcc でコンパイルするとき, そのプラットフォームで可能なだけの gcc 警告フラグが 有効にされます. (この清潔探訪は XS コードには 適用されません, なぜなら私たちが書いたわけではないコードの きれいさは保証できないからです.) 他の C コンパイラでは strict フラグのようなものが追加もしくは適用されます.
幾つかのタイプの SV
を定義する定数の相対的な順序が変更されました;
特に, SVt_PVGV
は SVt_PVLV
, SVt_PVAV
, SVt_PVHV
そして SVt_PVCV
の前に移動しました. これは明示的にその順序を前提としている
コードを持っているのでなければ何らかの違いを作るでしょう. (B::*
オブジェクトの継承階層はこれを反映して変更されました.)
これに関連して, 内部的なタイプ SVt_PVBM
は削除されました.
この SV
の献身的なタイプは index
演算子と正規表現エンジンの
一部で, 高速な Boyer-Moore マッチを補助するために使われていました.
この利用は内部的にタイプ SVt_PVGV
の SV
によって置き換えられました.
新しいタイプ SVt_BIND
が追加されました, Perl 5 で Perl 6 を
実装するプロジェクトを考慮してです. これは意図的に実装されていません,
そして作成も破棄もされません.
渡したバージョンに対して一番古いバイナリ互換のある perl のバージョンを
与えると推測される C プリプロセッサシンボル PERL_PM_APIVERSION
及び
PERL_XS_APIVERSION
は利用されておらず,
時々間違った値を返しています.
これらは削除されます.
BASEOP
構造はより省スペースになりました.
op_seq
フィールドは削除され, 1ビットのビットフィールド op_opt
に沖かられました. op_type
は 9 bit 長になりました.
この結果, B::OP
クラスは seq
メソッドを提供しなくなります.)
perl のパーサが bison で生成されるようになりました (これまでは byacc で生成されていました). この結果, ちょこっと強靭になると思います.
また, Dave Mitchell は -DT
における字句解析デバッグ出力を改善しました.
const
の使用Andy Lester はどの関数パラメータやローカル変数が実際には
C コンパイラに対して const
で宣言することが出来るかを
決定するための多くの改良を提供してくれました.
Steve Peters は新しい *_set
マクロを提供し,
コアが LVALUE コンテキストでマクロに代入する代わりに
これらを使うように書き直してくれました.
新しいファイル, mathoms.c が追加されました.
これには perl コアでは使われていないけれど
バイナリ若しくはソース互換性の理由から提供を続ける関数が
含まれています. とはいってもこれらの関数は
コンパイラフラグに -DNO_MATHOMS
を加えるとコンパイルされなくなります.
AvFLAGS
は削除されましたAvFLAGS
マクロは削除されました.
av_*
の変更配列を操作するために使われる av_*()
関数は
null の AV*
パラメータを受理しなくなりました.
特殊変数 $^H 及び %^H の実装が, pure Perl で レキシカルプラグマを実装できるように変更されました.
B::
モジュールの継承階層が変更されました.
B::NV
は B::SV
から継承されるようになります
(以前は B::IV
から継承していました).
無名のハッシュ及び配列の構築子は optree において 3 つから 1 つの op となりました, pp_anonhash 及び pp_anonlist は op に OPf_SPECIAL フラグが経っている時にはハッシュ/配列への リファレンスを返すようになります. (Nicholas Clark)
レキシカルな $_
の実装における問題があります:
これは /(?{...})/
ブロックの内側では動作しません.
(t/op/mydef.t にある TODO テストを参照)
スタックされたファイルテスト演算子は filetest
プラグマの影響下では動作しません, なぜならそれらは _
の
stat()
バッファを利用していますが, filetest は stat()
を
バイパスするためです.
Unicode の処理は幾つかの箇所で文字列が内部的に UTF-8 フラグを 持っているかに依存して明白になっていません. これは perl 5.12 でより奇麗になるでしょう, しかしそれには ある程度の後方互換の消失がさけられません.
Linux 上で g++ 及びスレッドサポートでコンパイルすると,
$!
が正常な動作をしていないと報告されます.
これは glibc が2つの strerror_r(3)
の実装を
提供していて, perl は正しくない方を選択してしまうことに
起因します.
もしバグと思われるものが見つかったら, comp.lang.perl.misc ニュース グループに最近投稿された記事や http://rt.perl.org/rt3/ にある perl バグデータベースを確認してください. Perl ホームページ, http://www.perl.org/ にも情報はあります.
もしまだ報告されていないバグだと確信したら, そのリリースに含まれている
perlbug プログラムをを実行してください. バグの再現スクリプトを
十分小さく, しかし有効なコードに切りつめることを意識してください.
バグレポートは perl -V
の出力と一緒に perlbug@perl.org に送られ
Perl porting チームによって解析されます.
Changes 及び perl590delta から perl595delta の マニュアルページ群に完全な変更箇所があります.
INSTALL には Perl をビルドする方法があります.
README には一般的な事項があります.
Artistic 及び Copying には著作権情報があります.