アプリ版:「スタンプのみでお礼する」機能のリリースについて

最近Perlを勉強し始めたのですが、正規表現の扱いに困っています、よろしくお願いします。

rog.txt
<usr1> ~~
(usr2) ~~
usr3 > ~~
<usr1> ~~
usr3 > ~~

というようなテキストの、ユーザー表示部分(ユーザー名の囲い方はcgi側からは指定できない)を、利用者がhtml上のフォームから

「<usr1> 」は「○○」に
「(usr2) 」は「××」に...

というように指定して一気に変換するcgiを作っています。
ユーザー名部分だけを配列に溜めて、フォームを表示して、変換指定を受け取るところまではできたのですが

最後の変換の部分で上手くいかなくて困っています。

@oldRog には上記のテキストを読み込んで1行ごとに代入
@tmpOldName にはフォームから受け取った古い名前を代入
@tmpNewName にはフォームから受け取った新しい名前を代入してあります

$i = 0;
foreach(@oldRog){
    $j = 0;
    $tmp = $_;
    foreach(@tmpOldName){
        $tmp =~ s/^$tmpOldName[$j]/$tmpNewName[$j] /;
        $j = $j + 1;
    }
    $rog[$i] = $tmp;
    $i = $i + 1;
}

実行してみるとユーザー名を囲う印に"("などが使用されているとその名前が全て変換されません
おそらく正規表現上で意味のある"("と解釈されているのだろうと考え
エスケープさせるために"\"を使おうと思ったのですが、
$tmp =~ s/^\$tmpOldName[$j]/$tmpNewName[$j] /;
としてみてもうまくいきませんでした。

先にテキストファイルのほうで半角(から全角(に変換する等して回避はできたのですが
できれば変換の部分だけで処理したく思っています

よろしくお願いします

*タブが消えてしまっていたので上げ直しました、ここの使い方にまだ慣れておらず申し訳ありません

A 回答 (1件)

\Q

    • good
    • 0
この回答へのお礼

1発で解決しました、有難うございます!

お礼日時:2011/07/29 18:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!