今日、perl スクリプトを実行していて、問題が発生しました。根本的な問題のあるコードを特定しましたが、正確に何が問題なのかはわかりません。
以下は、問題を再現するコードです。
use Strict;
my $d1 = "development/source/Utils/THOR.Thunder.Client/Release/THOR.Thunder.pdb";
my $d2 = "development/source/Utils/THOR.Thunder.Client/Release/CF.Thunder.Client.API.Conversion.dll";
my $search = '^development/source/Utils/([^\\\\\/]+)/(install|Release)/';
my $with = '$1/';
print "$d1\n$d2\n$search\n$with\n\n";
if ($d1 =~ m/$search/)
{
print "Yippie 1 $1\n";
}
if ($d2 =~ m/$search/)
{
print "Yippie 2 $1\n";
}
$d1 =~ s/$search/$with/gi;
print("The value of 1 is $1\n"); #Print statement 1
$d2 =~ s/$search/$with/gi;
print("The value of 1 is $1"); #Print statement 2
上記のコードでは、両方の if 条件が true であり、$1 は正しい "THOR.Thunder.Client" として出力されます。しかし、置換に関しては、私には理解できない奇妙なことが起こっています。print ステートメント 1 では、$1 は「THOR.Thunder.Client」ですが、Print ステートメント 2 では空です。私はそれが同じ値を持つことを期待します。
ただし、「CF.Thunder.Client.API.Conversion.dll」の 2 文字を削除して d2 の長さを短くすると、正しい結果が得られます。つまり、print ステートメント 2 の $1 に必要な値が含まれています。
なぜこれが起こっているのか誰か説明してもらえますか?