動的置換の正規表現を処理するために eval を使用しています。
左側 ($1) の値キャプチャは、正規表現の右側では使用されていません。
#!/usr/bin/perl
use strict;
my $string = "test-txt";
# Attempt 1
my $regexp_m = '-(\S+)$';
my $regexp_r = '.$1';
my $string2 = eval{ $string =~ s/$regexp_m/$regexp_r/; return $string; };
# Attempt 2
my $regexp = 's/(\S+)$/.$1/';
my $string3 = eval{ $string =~ $regexp; return $string; return $string; };
print "Attempt 1: $string2\n";
print "Attempt 2: $string3\n";
exit;
出力:
試行 1: test.$1
試行 2: test.$1