我对 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/