【问题标题】:Perl String - Substitute Characters without forming a new variablePerl 字符串 - 替换字符而不形成新变量
【发布时间】:2011-01-08 19:25:28
【问题描述】:

是否可以在不创建全新变量的情况下替换部分字符串?

现在我是这样做的:

$someString = "how do you do this";
$someString = s/how do/this is how/;

我想要做的是保留原始字符串 ($someString) 并能够在不修改原始字符串的情况下替换几个字符。我更熟悉 Javascript,我可以在您的代码中这样做,而无需创建/修改变量。

someString.replace(/how do/, "this is how")

感谢任何帮助,非常感谢

【问题讨论】:

标签: perl


【解决方案1】:

请注意,我很确定我理解这个问题。如果要保持原始字符串不变,则需要创建一个新变量。

$newstring = $someString ;
$newstring =~ s/how do/this is how/;

注意运算符是=~ 而不是=

addition 我想我现在看到了您想要的 - 返回更改后的字符串而不是修改变量。在 Perl 5.14 中会有办法做到这一点,但我目前不知道有什么办法。请参阅Use the /r substitution flag to work on a copyThe Effective Perler

更新 s/ / /r 功能已经在 Perl 中发布了一段时间。你可以做

use 5.14.0 ;
my $someString = "how do you do this";
say ($someString =~ s/how do/this is how/r) ;

【讨论】:

  • 我认为他可能想要print $someString =~ s/how do/this is how/; 之类的东西,但不接触$someString
  • 很好地提到了新的 /r 标志,我认为这将是 Perl5 的一个比智能匹配更好的补充~~
  • 是的,我只是想返回更改后的字符串,而不是修改变量。很高兴看到它很快就会有能力。
  • 你可以用(my $newstring = $someString) =~ s/how do/this is how/;写成一行
【解决方案2】:

你也可以使用 lambda,即:

sub { local $_ = shift; s/how do/this is how/; $_ }->($someString)

这也会保留$_,以防您将 lambda 称为 sub { }->($_)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-31
    • 2014-10-06
    • 1970-01-01
    • 2020-07-09
    • 2017-01-17
    • 1970-01-01
    • 2013-02-16
    • 2022-01-08
    相关资源
    最近更新 更多