“攻城速報@ろらじお” v1.16

久しぶりに、ゆっくり休める時間が取れたので、弄りました…
というか、直しました(汗
< を含むG名が反映されないと言う事で調べて調べて…
ログインしてないし、とりあえず模擬ログを作って食わせてみると、確かに飛ぶ。
ぱっと理由が思い付かなかったので、デバッグ出力させて調べまくり(笑


356行目以降の

$tmp =~ /^砦 \[(\w).+?(\d)\].+?\[(.+)\] /;
my $sec = (($ltm[0] - 20) * 60 + $ltm[1] ) * 60 + $ltm[2];
my $gnm = $3;
$gnm =~ s/</&lt;/gi;
push (@{$fort{"$1$2"}}, ({sec=>$sec, time=>$time, name=>$gnm}));

ここらへんに原因があるのは最初から分かっているものの、何ゆえバグるのか分からない。
ずーーっと、「値」の方にバグがあると思っていたものの…

$gnm =~ s/</&lt;/gi;

ここで、< を見つけた時に"のみ"正規表現の後方参照が初期化されて、$1と$2がクリアされるので、

push (@{$fort{“$1$2″}}, ({sec=>$sec, time=>$time, name=>$gnm}));

で、$fort{"$1$2"} が $fort{""} と解釈されるため、挿入すべき砦番号が分からずに闇に消えていると…
ぉぉぅ(汗
そりゃそうだ…正規表現の後で、再度正規表現使ったら、そうなるわね・・・
$1$2が後方参照の値って、忘れてたーよ…
ダメダメでした。

カテゴリー: CGI   パーマリンク

コメントは受け付けていません。