我想理解这个表达意思。
$req_msg =~ s/ \${$toReplace}/$replacements->{$toReplace}/g;
答案 0 :(得分:4)
这项工作的先决条件是两个变量:
$toReplace
- 包含任意值$replacements
- 包含,错误,替换的HASH参考鉴于$toReplace
包含“foo”,$req_msq
的内容会搜索${foo}
(带有前导单个空格),每次出现时都会被$replacements->{foo}
替换
答案 1 :(得分:2)
$ req_msg = ~s / \ $ {$ toReplace} / $ replacementments-> {$ toReplace} / g;
用于替换。 $content=~ s/old_value/new_value/modifier;
(修饰符可以是i,g,x,沿或组合)
前:
$content = "Hi I am a coder and I like coding very much!";
$content =~ s/i/eye/i;
现在$ content将包含“Heye eye am a coders and eye like very very much”
同样地,$ {$ toReplace}只是意味着标量引用是需要替换的旧值,$ replacements-> {$ toReplace}意味着$ replacementments是一个哈希引用,其键是$ toReplace。 $ hash_value = hash_ref-> {key};
很常见当它找到标量引用返回的值时,将使用哈希引用的键替换为$ req_msg中找到的相应值
但我猜你问这个问题是因为你有空白的替代品。这可能是由于标量参考问题所致。
此代码段可能有助于消除您的疑虑。
#!/usr/bin/perl
use strict;
use warnings;
my $value = "Jassi";
my $scalar_ref = \$value;
print "scalar_ref = $scalar_ref \n and value = $value and ${$scalar_ref}\n";
my %hash = ("Jassi", "aliencoders");
my $hash_ref = \%hash;
my $reg_msg = "Hi this is Jassi";
print "reg_msg = $reg_msg \n";
$reg_msg =~ s/${$scalar_ref}/$hash_ref->{${$scalar_ref}}/;
print "reg_msg after s = $reg_msg\n";
查看最后一行!
答案 2 :(得分:0)
它将文本${blabla}
的每次出现替换为使用密钥$replacements
存储在哈希引用blabla
中的任何内容,例如:
$replacements = { 'blabla' => 'blubb' };
将${blabla}
中的blubb
替换每个$req_msg
。