Perl String - 替换字符而不形成新变量

时间:2011-01-08 19:25:28

标签: perl

是否可以替换部分字符串而无需创建全新的变量?

现在我这样做:

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

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

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

感谢任何帮助,非常感谢

2 个答案:

答案 0 :(得分:15)

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

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

请注意,运算符为=~而不是=

添加我想我现在看到了你想要的东西 - 返回更改的字符串而不是修改变量。在Perl 5.14中有一种方法可以做到这一点,但我目前还不知道一种方法。请参阅Use the /r substitution flag to work on a copy上的The 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) ;

答案 1 :(得分:0)

您也可以使用lambda,即:

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

如果您将lambda称为sub $_

,这也会保留{ }->($_)