1

正規表現コンストラクターを作成しています。しかし、実行中:

my $text = 'a a a';
my $replace = '$1/$2-$3';
$text =~ s/(\w) (\w+) (\w+)/$replace/gmi;

$ text here ='$ 1 / $ 2- $ 3'; したがって、$ 1、$ 2、$ 3は変更されませんが、$replaceにそのまま配置されます。$ replaceコンテンツを手動で印刷されたリプレートパターンとして使用するにはどうすればよいですか?

4

1 に答える 1

4

$replace単なる文字列です。コードとして評価する場合は/e、置換に修飾子が必要です。ただし、変数を補間するための評価用に文字列を準備する必要もあります。

my $replace = 'qq($1/$2-$3)';
$text =~ s/(\w) (\w+) (\w+)/$replace/gmiee;

二重評価を使用して、最初に変数を文字列に変換し、次にその文字列を評価します。

ただし、evalに依存していることに気付いた場合は、おそらく不必要なことをしていることになります。OmnipotentEntityが正しく指摘しているように、evalはかなり悪意のあるものになる可能性があるため、使用には十分注意してください。

于 2012-11-01T20:29:41.280 に答える