[Namazu-users-ja 709] pnamazuでreplaceにて\1を使えるようにする

OGAWA KenIchi kenichi @ ice.email.ne.jp
2006年 3月 14日 (火) 02:11:10 JST


小川と申します。

Namazu 2.0.16 リリースのアナウンスの中で pnamazu のバージョンアップも
推奨されていたのでバージョンアップを実施したのですが、その結果

pnamazu の Replace について
http://www.namazu.org/ml/namazu-users-ja/msg02205.html

で指摘されている、replace で \1 などが置換されない問題が発現してしまい
ました。

この問題は pnamazu の 2002.11.16版でも起こっていて、以前 pnamazu 作者
の古川さんに連絡してこの問題を修正した 2003.08.16版 というものを個人的
に提供して頂き、私はこのバージョンをずっと使用していました。

Namazu 2.0.16と同時にリリースされていた pnamazu の 2006.02.28版 には 
2003.08.16版 の修正が反映されていないようでしたので、件の問題が発生し
ているのだと認識しています。

2003.08.16版 から replace の問題への対処と思われる部分を抜き出してパッ
チを作ってみたので、このメイルの最後に示しておきます。
一応手元の環境ではこの修正で replace時に\1などが使用できるようになった
ようですが、私は修正の内容はさっぱり理解できていないので、もし問題など
あるようでしたらご指摘いただけると助かります。

以下に修正内容を示します。

--- ../../pnamazu-2006.02.28/src/ldnmzcnf.pl    2002-07-30 01:08:19.000000000 +0900
+++ ldnmzcnf.pl 2006-03-14 01:15:11.000000000 +0900
@@ -100,11 +100,13 @@

 sub entry_replace{
     my ($src, $dst) = @_;
+    my $sub = eval "sub {\$_[0] =~ s\xff$src\xff$dst\xffi}";
     local($_);
     eval {s/$src/$dst/i};
     unless ($@){
         unshift(@ReplacePattern, $src);
         $ReplacePattern{$src} = $dst;
+        $ReplaceSub{$src} = $sub;
         $URL_REPLACE_FROM = $src;
         $URL_REPLACE_TO = $dst;
     }
@@ -118,7 +120,7 @@
     }
     my $pat;
     for $pat (@ReplacePattern){
-        &debug_log("replace: $src => $_[0]"), return if $_[0] =~ s/$pat/$ReplacePattern{$pat}/i;
+        &debug_log("replace: $src => $_[0]"), return if &{$ReplaceSub{$pat}}($_[0]);
     }
 }

-- 
小川建一  mailto:kenichi @ ice.email.ne.jp
                                      ++



Namazu-users-ja メーリングリストの案内