0

別の行に $1 を書き込んで置き換えたい。

my $converting_rules = +{
    '(.+?)' => '$1',
};

my $pre     = $converting_rule_key;
my $post    = $converting_rules->{$converting_rule_key};
#$path_file =~ s/$pre/$post/; // Bad... 
$path_file =~ s/$pre/$1/; // Good!

Bad では、$1 は文字列 '$1' として認識されます。しかし、一致した文字列を扱う必要はありません。どうすればいいのかわかりません...助けてください!

4

2 に答える 2

2

問題はs/$pre/$post/、変数$preとを補間$postすることですが、たまたま変数のように見えるものは再帰的に補間しません。したがって、次のフラグevalを使用して、置換にエクストラを追加します。/ee

$path_file =~ s/$pre/$post/ee;
于 2013-01-25T18:53:01.660 に答える
0
$x = '$1.00';
print qq/$x/;

プリント$1.00なので、驚くことではありません

$x = '$1.00';
s/(abc)/$x/;

に置き換え$1.00ます。

あなたが持っているのはテンプレートですが、このテンプレートを処理するために何もしませんでした. String::Interpolateはそのようなテンプレートを処理できます。

use String::Interpolate qw( interpolate );
$rep = '$1';
s/$pat/ interpolate($rep) /e;
于 2013-01-25T19:13:19.773 に答える