使用Perl变量作为替代表达式

时间:2019-09-20 20:24:46

标签: perl substitution

我想从外部数据灵活地读取替代表达式, 所以我的问题可以简化为以下内容:

my $pattern = "s/a/b/g";
my $string  = "abcd";

$string =~ $pattern;
print("$string\n");

这不起作用,但是我的问题在哪里? 还是没有解决办法?

1 个答案:

答案 0 :(得分:2)

$pattern不包含正则表达式模式;它包含一些Perl源代码。要评估Perl代码,您需要eval EXPR(或dorequire)。

但是,从用户那里获取Perl代码不是一个好主意。相反,我建议分别要求图案和替换,如下所示:

my $pattern = 'a';
my $replacement = 'b';
my $string = 'abcd';

$string =~ s/$pattern/$replacement/g;

如果要允许$1,并在替换表达式中允许使用String::Substitution,请使用https://laravel.com/docs/6.x/collections#available-methods中的函数。

use String::Substitution qw( gsub_modify );

my $pattern = '(a)(b)';
my $replacement = '$2$1';
my $string = 'abcd';

gsub_modify($string, $pattern, $replacement);