regex - 如何在 perl 替换运算符的替换端使用表达式?

标签 regex perl substitution

我对 Perl 很陌生,面临一个问题。这可能听起来是一个愚蠢的问题,但我想很好地理解它。

所以我有一个包含子字符串的字符串变量,我想将其替换为哈希字符串。

my $l_filedata = 'abcOVERRIDE_CONTAINS_FUNCTIONSasdfghjk';

my $hash_ref = {};
Dumper($hash_ref->{'ContainsMessage'}); # This returns a hash and I've maintained it under scalar variable

Output
------
{
  '23.2.10103' => 1,
  '23.2.10101' => 1,
  '23.2.10102' => 1
}

所以我想执行查找替换操作,我的做法是

$l_filedata =~ s/OVERRIDE_CONTAINS_FUNCTIONS/eval(Dumper($hash_ref->{'ContainsMessage'}))/g;

我正在尝试使用 Dumper 将哈希转换为字符串,然后希望用 Dumper 返回的字符串替换该字符串。但它总是返回给我abceval(Dumper(HASH(0xe88f00)))asdfghjk。我认为替换表达式被视为字符串而不是表达式。

当我这样做时 -

my $temp = Dumper($hash_ref->{'ContainsMessage'});
$l_filedata =~ s/OVERRIDE_CONTAINS_FUNCTIONS/$temp/g;

它正在按预期工作。有人可以告诉我我在这里缺少什么吗?

最佳答案

使用 e 标志将替换部分视为要计算的代码,而不是字符串文字的正文。

s/OVERRIDE_CONTAINS_FUNCTIONS/ Dumper( $hash_ref->{ ContainsMessage } ) /eg

但是您真的想多次转储该结构吗?以下(您已经提到过)可能是可行的方法:

my $replacement = Dumper( $hash_ref->{ ContainsMessage } );

s/OVERRIDE_CONTAINS_FUNCTIONS/$replacement/g

s{...}{...}

相当于

s{...}{ qq{...} }e

这意味着

s{...}{eval(Dumper(...))}

相当于

s{...}{ qq{eval(Dumper(...))} }e

但你只是想要

s{...}{ Dumper(...) }e

关于regex - 如何在 perl 替换运算符的替换端使用表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76521758/

相关文章:

除撇号外的所有非字母数字的java字符串拆分

javascript - 正则表达式 : Remove superfluous zeros and decimal point at the end of a number

regex - 如何从动态创建的 URL 中删除点

Perl qr//操作

regex - 替代字符串中组上的vim调用函数

c# - 用于解析 C# 源代码的正则表达式

javascript - 使用react登录成功时重定向

Perl,根据第二行中的值更改第一行中的值,

ruby - 如何在 Ruby 中同时翻译多个单词?

python - 替换键值表中的子字符串