在Perl中,運算符s/
用於替換部分字符串。現在s/
將改變其參數(字符串)到位。不過,我想在Perl:使用s /(替換)並返回新字符串
print "bla: ", replace("a","b",$myvar),"\n";
替換字符串的部分befor打印出來,因爲有這樣replace
功能Perl或一些其他的方式來做到這一點? s/
將不會直接在這種情況下工作,我想避免使用輔助變量。有沒有辦法做到這一點?
在Perl中,運算符s/
用於替換部分字符串。現在s/
將改變其參數(字符串)到位。不過,我想在Perl:使用s /(替換)並返回新字符串
print "bla: ", replace("a","b",$myvar),"\n";
替換字符串的部分befor打印出來,因爲有這樣replace
功能Perl或一些其他的方式來做到這一點? s/
將不會直接在這種情況下工作,我想避免使用輔助變量。有沒有辦法做到這一點?
未經測試:
require 5.013002;
print "bla: ", $myvar =~ s/a/b/r, "\n";
取代操作者現在支持A/R選項,副本輸入變量,執行在複印的取代,並返回結果。原始文件保持不變。
my $old = 'cat';
my $new = $old =~ s/cat/dog/r;
# $old is 'cat' and $new is 'dog'
哇,新的選項,不錯 – unbeli 2010-08-09 13:31:05
好的whaddya知道!非常便利。如果我知道這件事,我會在大約80%的時間內使用它! – 2010-08-09 13:41:43
啊,現在我看到它實際上是最近的...... Perl 5.13.2。因此,尋找老版本的解決方法仍然很有趣。 – 2010-08-09 13:47:09
在Perl 5.14和以後可以使用/r
選項與替代操作者執行non-destructive substitution:
print "bla: ", $myvar =~ s/a/b/r, "\n";
備選地,可以使用一個do()
塊用臨時詞法變量,例如:
print "bla: ", do { (my $tmp = $myvar) =~ s/a/b/; $tmp }, "\n";
print "bla: ", $_, "\n" if ($_ = $myvar) =~ s/a/b/g or 1;
如果你真的想,你可以讓你自己的,但我不會因爲你有更多的功能與s///
...你可以建立一個功能集成到你的功能,但爲什麼重新創建已經存在的東西?
#!/usr/bin/perl -w
use strict;
main();
sub main{
my $foo = "blahblahblah";
print '$foo: ' , replace("lah","ar",$foo) , "\n"; #$foo: barbarbar
}
sub replace {
my ($from,$to,$string) = @_;
$string =~s/$from/$to/ig; #case-insensitive/global (all occurrences)
return $string;
}
print "bla: ", $myvar =~ tr{a}{b},"\n";
的[我如何在一根繩子上執行一個Perl替換,同時保持原有的?](
可能重複http://stackoverflow.com/questions/22836/how-do-i-perform- a-perl-substitution-on-a-string-while-keeping-the-original) – daxim 2011-02-09 07:13:56