我想在perl(s //)中使用变量作为替换文本?显然,以下代码不起作用。有办法做我想做的事吗?
~$ ./subsuffix.pl
xxx_$1_outsuffix.txt
subsuffix.pl:
#!/usr/bin/env perl
use strict;
use warnings;
my $filename="xxx_5p_insuffix.txt";
my $insuffix="_((5|3)p)_insuffix.txt";
my $outsuffix = '_$1_outsuffix.txt';
#result of the following is what I expect
#$filename =~ s/$insuffix$/_$1_outsuffix.txt/;
#But I want used a variable as the substitution text.
#Unfortunately, the following do not work.
$filename =~ s/$insuffix$/$outsuffix/;
print "$filename\n";
答案 0 :(得分:4)
通常不评估更换。您必须在替换结束时添加几个/e
并在第一次评估后添加一些引号以使其保持有效表达式:
$filename =~ s/$insuffix$/qq("$outsuffix")/ee;
答案 1 :(得分:3)
您可以使用/e
修饰符将替换模式视为要评估的代码:
$filename =~ s/$insuffix$/ "_" . $1 . "_outsuffix.txt" /e;
答案 2 :(得分:2)
$outsuffix
中的内容是模板。模板不会神奇地处理自己。您需要调用处理器。 String::Interpolate了解您的模板。
use String::Interpolate qw( interpolate );
my $filename="xxx_5p_insuffix.txt";
my $insuffix="_((5|3)p)_insuffix.txt";
my $outsuffix = '_$1_outsuffix.txt';
$filename =~ s/$insuffix$/interpolate($outsuffix)/e;
print "$filename\n";