Smartphonemoriyoshiの日記この広告は、90日以上更新していないブログに表示しています。bug「鬼車の[[:print:]]はPOSIX流じゃないらしい」でid:ockeghemさんやid:nihenさんと先週いろいろやりとりしてた中で、一つだけ解決していない問題があった。utf8フラグが立っているかどうかでPOSIX文字クラスのマッチの挙動が変わるという件。詳しい調査をありがとうございます。トラックバックのブログに書いたように、[:print:]の挙動は、Perlでもutf8フラグの有無でも変わってくるようです。[:print:]は実用できないなと思いましたえ?まじ?と思うも、一応Perlのコード例も出していたので検証しないわけにはいかない。以下のようなコードで試してみたが、utf8フラグが立っていない場合と同じ結果となり、再現しないのだ。(一部コメントをつける都合で改変)。"\n";なんで文字種を変えているかは、下記を参照。確かにこれの結果はmummとなる。ところで、utf8フラグが立っているときの正規表現マッチの挙動についてドキュメントを参照してみると、次のように書いてあった。perldocまあつまりパタン自体は文字コード中立なOPコードとして表現されるらしいのだけど、これは誤解を招く表現だ。いうのは、パタン文字列自体がどう解釈されるかは別らしいから。インターフェイスが使われます。これは実際パタンがどのように解釈されてOPコードに変換されるのかを見てみるほかない。内部でどのように正規表現がコンパイルされているのかを目で追うことができるようになる。いうわけで、以下の3つを比較。互いに排他的に働くわけではない実際にマッチさせるとどうなるか。チェックを行っている箇所を調べてみる。ドキュメントに書いてなさげなのでソースに潜っていくしかないようだ。文字列を大まかにパースする処理が入る。セットされた後で、次のような後処理が行われている。突っ込まないのかはよく分からないけど、このようにハンドルを経由した弱参照を使うというのは循環参照を防止するテクニックの一つなので、そういう理由があるのだと思われる。