[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 メーリングリストの案内