2

可能重复:
如何在保留原始字符串的同时对字符串执行 Perl 替换?
Perl:使用 s/ (替换)并返回新字符串

如果您找到更好的描述方式,请随意修改此问题的标题。

想象一下我们有:

   my $foo = something;
   my $newfoo = $foo =~ s/.*/something else/;

我以为我会拥有$newfoo = something else,而我发现它等于 1。我想这个 1 可以说“匹配和替换成功”。

我找到的唯一解决方案是后续:

  my $foo = something;
  my $newfoo = $foo;
  $newfoo =~ s/.*/something else/;

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

4

2 回答 2

5

如果您使用perl 5.14或更高版本,这将起作用。它被称为非破坏性替换。否则,您将不得不坚持临时分配:

my $newfoo = $foo =~ s/.*/something else/r;
                                         ^ Add this
于 2012-06-25T15:01:58.697 回答
3

您可以在任何版本的 Perl 中通过合理地使用括号来分配和执行替换:

(my $newfoo = $foo) =~ s/.*/something else/;

在这种情况下,使用 Perl v5.14 可以为您节省一次击键(尽管 v5.14 可能还有其他好处)

于 2012-06-25T15:56:02.920 回答