[Tokyo.pm] look-behind in mg pattern, and relative
backreference
Kazumasa Utashiro
utashiro @ iij.ad.jp
2002年 3月 5日 (火) 08:04:55 CST
From: maeda @ tokyo.pm.org
Subject: Re: [Tokyo.pm] look-behind in mg pattern, and relative backreference
Date: Tue, 05 Mar 2002 10:53:12 +0900
> 歌代さん> (は|が|に|を)\1
>
> /はは|がが|にに|をを/ とするのが一番わかりやすいのは確かでしょうが、
> まあそれは置いといて。
まま、まま、
> 歌代さん> たとえば、\-1 で1つ前の括弧が参照できればいいんでしょうけど。
>
> どうしてもこれをやりたければ、(?{ code })を使うしかないかなあ。
やっぱりそうですかね。一応思い付きはしたんですが、できたとしてもあまり
にトリッキーなので、もっとまともな方法がないもんかと思って聞いてみまし
た。
> こんなの↓やってみたんですが、Perl5.6.1と5.7.2ではperlがコアダン
> プしてしまいました。
>
> while (<>) {
> use re 'eval';
> local $x = qr(x);
> print $&, "\n" if /([a-d])(?{ $x=qr($^N) })(??{ $x })/x;
> }
コアダンプするのは qr がまずいみたいで、
print $&, "\n" if /([a-d])(?{ $x=$+ })(??{ $x })/x;
としたら、一応落ちずに動きます。
スコープのせいなのかなんなのか、最初の値を憶えてるみたいなので、
print $&, "\n" if /([a-d])(?{ $x=$+ })(??{ eval "\$x" })/x;
としたら、一応予想通り動くように見えます。
ところで、
print $&, "\n" if /([a-d])(??{ qr($+) })/x;
は動くんですが、前田さんがこうしなかった意図は何?
--utashiro
Tokyo-pm メーリングリストの案内