【问题标题】:String replacement with Perl without assigning a variable [duplicate]用Perl替换字符串而不分配变量[重复]
【发布时间】:2013-07-31 03:29:04
【问题描述】:

我知道 Perl 中的字符串不是不可变的,所以自然的字符串替换方法是 $var =~ s/re/$with/g

然而,这对我作为一个习惯于诸如

之类的程序员来说是极其有限的

JS:

string.replace(/re/g, with)

重击:

${var//re/$with}

我看到的唯一解决方法是声明一个执行此任务的子例程,实现它很简单,但需要在执行此操作的代码中的任何地方复制或导入它。这是唯一的方法吗?

【问题讨论】:

  • 您能否更清楚地说明您要做什么?在所有的拖钓之间,我看不出你的问题。哦,你使用的是什么 perl 版本?是否≥ v5.14?
  • 我想称这种拖钓是公平的。我正在做一些当时并不漂亮的事情。但是,我们非常感谢您的快速回答。

标签: perl


【解决方案1】:

s/// 使用r 修饰符。它将执行非破坏性替换(不修改左操作数)并返回替换结果。您需要 Perl 5.13.2 或更高版本。

say $var =~ s/re/$with/gr; # print result of replacing "re" with $with in $var
say $var; # print original $var, without anything substituted

【讨论】:

  • 这是一个例子:print "hello" =~ s/e/b/r; 返回hbllo
  • 哦,太好了,我们这里甚至还没有 5.14。但只是要清楚如何使用它:expr_producing_string() =~ s/re/$with/gr 评估为替换的字符串?
  • @StevenLu 是的。在较旧的 Perls 上,您必须像 do {(my $temp = $var) =~ s///; $temp} 一样解决它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-18
  • 2017-04-06
  • 1970-01-01
  • 1970-01-01
  • 2014-10-06
  • 1970-01-01
相关资源
最近更新 更多