$1
、、 ...を含む置換文字列で変数補間を使用しようとしていますが、置換$2
に展開することはできません$1
。最終的には
、変数$pattern
と$replacement
変数を構成ファイルから読み取るようにしますが、それらを手動で設定しても機能しません。
サンプル スクリプトでは、$1
('DEF' である必要があります) が で展開されていません$new_name
が、$new_name2
(変数なしで) に展開されていることがわかります。
置換に「e」フラグを追加しても役に立ちません。
これを修正するにはどうすればよいですか?
マット
例コード:
#!/usr/local/bin/perl
use strict;
my $old_name = 'ABC_DEF_GHI';
my $pattern = 'ABC_(...)_GHI';
my $replacement = 'CBA_${1}_IHG';
# using variables - doesn't work
my $new_name = $old_name;
$new_name =~ s|$pattern|$replacement|;
printf("%s --> %s\n", $old_name, $new_name);
# not using variables - does work
my $new_name2 = $old_name;
$new_name2 =~ s|ABC_(...)_GHI|CBA_${1}_IHG|;
printf("%s --> %s\n", $old_name, $new_name2);
出力:
ABC_DEF_GHI --> CBA_${1}_IHG
ABC_DEF_GHI --> CBA_DEF_IHG