为变量赋值使用regex修改的另一个变量的结果

时间:2012-06-25 14:59:06

标签: regex perl

  

可能重复:
  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/;

有没有办法完成相同的任务,即创建一个带有正则表达式结果的新变量而不修改第一个变量,没有中间步骤?

2 个答案:

答案 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可能还有其他好处)