-1

このことを考慮:

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に予約文字($)が含まれていない場合、置換は実行されます。

my $var = "SOME_VAR"
/* everything else the same */

戻り値

processed string = <In this text ${X} will be replaced with X>

しかし、予約文字が変数内に含まれている場合、つまり検索トークンが明示的ではなくパラメーター化されている場合に、予約文字をエスケープする方法がわかりません。

何か案が?

ありがとう

4

2 に答える 2

1

文字列に$は、特別な意味を持つが含まれています。を使用\Q\Eて機能させることができます。

$string =~ s/\Q$var\E/X/g;

\ Qは、\Eまでパターンメタ文字を無効にします

于 2012-10-03T16:17:53.933 に答える
0

構文は、${foo}文字列内であってもソフトリファレンスです。$SOME_VARの値をに間接的に割り当てています$var$SOME_VARがundefの場合、空の文字列を取得し、正規表現で常に一致するように変換します。

Rohit Jainが指摘したように、一重引用符またはエスケープは、$使用に加えて問題を解決します。\Q

于 2012-10-03T16:30:02.883 に答える