可能重复:
How do I perform a Perl substitution on a string while keeping the original?
Perl: Use s/ (replace) and return new string
如果您找到更好的方式来描述它,请随意修改此问题的标题。
想象一下我们有:
my $foo = something;
my $newfoo = $foo =~ s/.*/something else/;
我以为我会$newfoo = something else
,而我发现它等于1.我想这一点就是说'匹配并取代成功'。
我找到的唯一解决方案是后续:
my $foo = something;
my $newfoo = $foo;
$newfoo =~ s/.*/something else/;
有没有办法完成相同的任务,即创建一个带有正则表达式结果的新变量而不修改第一个变量,没有中间步骤?
答案 0 :(得分:5)
如果您使用perl 5.14或更好,这将有效。它被称为non-destructive substitution。否则你将不得不坚持临时任务:
my $newfoo = $foo =~ s/.*/something else/r;
^ Add this
答案 1 :(得分:3)
您可以明智地使用括号在任何版本的Perl中分配和执行替换:
(my $newfoo = $foo) =~ s/.*/something else/;
在这种情况下使用Perl v5.14可以为您节省一次击键(尽管v5.14可能还有其他好处)