▼ [Perl] Perl 5.9.5変更点 (の一部)
2007/07/25 21:32
Perl v5.9.4 - v5.9.5間の変更点で気になったところをメモ。(元ネタはv5.9.5のperldelta) v5.9.x は開発版のため、安定版で利用できるまではしばらくかかる。(v5.10 で実装?)
非互換
- 汚染とprintf
- Taint mode (汚染チェックモード) で動作する場合、printf/sprintfの書式指定文字列に汚染されたデータはNG。
- undefとシグナルハンドラ
- "
undef $SIG{FOO}", "delete $SIG{FOO}"は "DEFAULT" の代入と等価になった。 - 仮想ハッシュは取り除かれた
- 仮想ハッシュ (pseudo hash) って何だ? と思ったら配列をハッシュっぽくアクセスする機構らしい。いらないな。
- バイトコードコンパイラと perlcc は削除
- 信頼性と人的資源の問題らしい。
正規表現
- 再帰的なパタン
- "
(??{})" 構文を使用せず、再帰的なパタンを記述可能になる。後方参照して使えるので嬉しい。入れ子になった対応する山括弧にマッチさせるには下記の通り:/ ^ # 行の開始 ( # 取込領域1の開始 < # 開き山括弧にマッチ (?: # 以下のいずれかにマッチ: (?> # このグループ内でバックトラックを発生させない [^<>]+ # 山括弧以外の文字が1文字以上 ) # 無バックトラックグループの終了 | # ... または ... (?1) # 取込領域1の呼び出して再実行 )* # 0回以上。 > # 閉じ山括弧にマッチ ) # 取込領域1の終了 $ # 行の終了 /xPCREの実装とは少々異なるので注意とのこと。 - 名前付きの取込領域
- $1 のように数字でアクセスする時代は終わった。
(?<name>regex)でマッチさせた部分は\k<name>または$+{name}で参照することは出来る。例:s/(?<letter>.)\k<letter>/$+{letter}/g同一の取込領域名を複数個所に付けた場合、%+ の代わりに %- を利用する。これは値として配列へのリファレンスをもち、その配列にはマッチした文字列がそれぞれ含まれている。
▼ コメント(0件)
- TB-URL(確認後に公開) http://diary.asuka.net/021/tb/
