作者: 藤岡和夫
日時: 2006/2/26(01:38)
On Sun, 26 Feb 2006 00:10:13 +0900
"Bruce." <kbk@...> さんwrote:

> えー、チェックしてみましたが、このページはPerlに限った話では
> ないので、use encoding 'sjis'指定時のことを書くスペースが
> なかったのではないかと思います。で、\p{}はあくまでUnicode
> プロパティ(Unicodeコンソーシアムが提案している)ものなので
> 別の文字コードのときに使えないというのは間違いではないでしょう。
> 
> ただ、内部的にでもUnicodeに変換して扱うものであれば、当然
> Unicodeプロパティは使えるものなのでその辺の記述が足りなかった
> かも知れません

 おっしゃるように、わかっている人には、192ページのPOINTのコラムを読めば、
文字コードがEUCやSJISの場合には、jperlやjgawk等のマルチバイトの正規表現
エンジンを持つものを対象とした話をしているのだなとわかると思います。しか
し、本書の読み方の最初に、基本的にPerl5.8の環境を中心に解説していること
になっていますから、その前提が違うところは明示してもらったほうが親切な気
がしました。Perl5.8ではUnicodeを使うことを前提とするとしていれば、問題は
ないのです。実はそのようなことも、POINT(193ページ)には書かれていますから、
間違いとは言えないでしょう。ただ、後付なので、Perl5.8ではEUCやSJISも取り
扱えるのにと思ってしまう。Perl5.8で、スクリプトをutf8で書くことを前提に
するのは賛成ですけれども(^^)

 Perl5.8の環境を中心にと書かれているので、文字コードとencodingの問題を
最初のほうに少しまとめていただいていたら、大変参考になったと思います。本
書ではencodingにはほとんど触れられていないように思いましたが、他の言語で
はPerl5.8のencodingのような仕組みを持つものはないのですか?

> > また、Perl5.8のsjisエンコーディングでは、jperlの漢字の正規表現は同じ動作
> > になりませんね。
> 
> マッチング字に使用されるのはあくまで utf-8なので
> 
> 亜 → U+4E9C (E4 BA 9C)
> 煕 → U+7155 (E7 85 95)
> 
> であり、またJISとの並びとはぜんぜん関係ありませんのでこの
> 範囲にJIS X0208で収められている漢字がすべて入るわけでは
> ありません。実際、
> 
> 藤 → U+85E4
> 岡 → U+5CA1
> 和 → U+548C
> 夫 → U+592B
> 
> 「藤」が範囲から外れてますね。

 Perl5.8のsjisエンコーディングでjperlの正規表現を使うのは意味がありませ
んね。

> 記述が足りないのは確かだと思いますが、どう対処したものやら。
> 正誤表に載せるようなものではないと思えるし。

 Perl5.8による正規表現ハンドブックの読み方の記事でも書きましょうか(^^;)

 その他、エンコーディング絡みで気になったのは、\bや\wと\Wがencodingの有
無によって変化することですね。英大文字列の抽出の正規表現のところです。こ
の場合、use encoding "utf8";とした場合と何もencodingを使わない場合では、
\bの位置が変化します。

 もっと他にエンコーディング絡みで正規表現に影響が出るところがありますで
しょうか。

藤岡 和夫
kazuf@...
TS Networkのために http://homepage1.nifty.com/kazuf/