これは正確に「単純な」質問ではないので、自分を殴らないでください。
問題は、単一/eの場合、RHSはそのeval結果が置換に使用されるコードであると理解されることです。
そのRHSは何ですか?です$1。を評価すると、文字列$1が含まれていることがわかります。これには、上記の変数の内容は含まれていません 。その後に、その後に、その後に。が続きます。 $var$var
したがって、2回評価する必要があります。1回はに変換$1し、もう1回$varは前の結果を$var文字列に変換します"testing"。これを行うには、演算子にdoubleee修飾子を付けます。s
これは、1つで実行するのと2つで実行するので、非常に簡単に確認でき/eます。これは、両方のデモと、シンボリック逆参照を使用する3番目の方法です。これはパッケージシンボルテーブルを参照するため、パッケージ変数でのみ機能します。
use v5.10;
our $str = q(In this string we are $var the "e" modifier.);
our $var = q(testing);
V1: {
local $_ = $str;
s/(\$\w+)/$1/e;
say "version 1: ", $_;
}
V2: {
local $_ = $str;
s/(\$\w+)/$1/ee;
say "version 2: ", $_;
}
V3: {
no strict "refs";
local $_ = $str;
s/\$(\w+)/$$1/e;
say "version 3: ", $_;
}
実行すると、次のようになります。
version 1: In this string we are $var the "e" modifier.
version 2: In this string we are testing the "e" modifier.
version 3: In this string we are testing the "e" modifier.