在Perl中,我如何编写正则表达式匹配的字符串

时间:2013-01-25 18:45:30

标签: perl

我想在其他线路上写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!

On Bad,$ 1被识别为字符串'$ 1'。 但是我要把它当作匹配的字符串。 我不知道该怎么做......请帮助我!

2 个答案:

答案 0 :(得分:2)

问题是s/$pre/$post/插入了变量$pre$post,但不会递归插入其中看起来像变量的任何内容。因此,您希望使用eval标记为替换添加额外的/ee

$path_file =~ s/$pre/$post/ee;

答案 1 :(得分: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;