正規表現の置き換え文字列部分で使用できる$1や$2の使用方法を教えてください!

以下のソース1のようにs///gの置き換え文字列部分に$1や$2を直接記述すれば、1つ目と2つ目のマッチ部分で置換が行われるのは確認しました。
しかし、ソース2のように置き換え文字列部分を変数に代入したのち、使用すると、正しく置換が行われません。
$1や$2を含んだ置き換え文字列を変数に持っている状態で、ソース1と同じ結果を得るにはどうしたらよいか、ご存知でしたら教えて下さい。

##############################
# ソース1
##############################
#!/usr/bin/perl

$data = '1234567';
$ptn = '(\d{3})(\d{4})';
$data =~ s/$ptn/$1-$2/g;
##############################

$dataは123-4567となる。

##############################
# ソース2
##############################
#!/usr/bin/perl

$data = '1234567';
$ptn = '(\d{3})(\d{4})';
$str = "$1-$2";
$data =~ s/$ptn/$str/g;
##############################

$dataは-となる。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

こんにちは~


たとえばこんな感じでは

$data = '1234567';
$ptn = '(\d{3})(\d{4})';
$str = '$1-$2';
eval "\$data =~ s/$ptn/$str/g";
    • good
    • 0
この回答へのお礼

期待していた結果が得られましたー。
evalを使用するのですね。勉強になります。
本当にありがとうございました。

お礼日時:2006/11/24 20:24

No1 よりも劣るかも知れませんが、別の方法で.....。



$str = '$1-$2';
$data =~ s/$ptn/"\"$str\""/eeg;
    • good
    • 0

このQ&Aに関連する人気のQ&A

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


人気Q&Aランキング