考虑一下:
my $var = "${SOME_VAR}"
my $string "In this text ${SOME_VAR} will be replaced with X"
$string =~ s/$var/X/g;
print "\nprocessed string = <".$string.">";
返回
processed string = <In this text ${SOME_VAR} will be replaced with X>
即。替换不会发生。
但是,如果$ var不包含保留字符($),则替换为DOES:
my $var = "SOME_VAR"
/* everything else the same */
返回
processed string = <In this text ${X} will be replaced with X>
但是当我们将保留字符包含在变量中时,即当搜索令牌不是显式但是参数化时,我不知道如何转义保留字符。
有什么想法吗?
由于
答案 0 :(得分:1)
您的字符串包含$
,它具有特殊含义。您可以使用\Q
和\E
来使其正常工作..
$string =~ s/\Q$var\E/X/g;
\ Q禁用模式元字符,直到\ E
答案 1 :(得分:0)
${foo}
语法是一个软引用,即使在字符串内也是如此。您正在间接将$SOME_VAR
的值分配给$var
。如果$SOME_VAR
为undef,则会得到一个空字符串,转换为正则表达式中始终匹配。
单引号或转义$
除了使用\Q
之外,还解决了Rohit Jain所说的问题。