你真的不能做你想做的事,因爲替代函數返回一個1
如果它工作,或者如果它沒有工作,則爲空字符串。這意味着,如果你這樣做:
doStuff($foo =~ s/regex/replacement/);
的doStuff
功能將使用兩種1
或空字符串作爲參數。沒有理由爲什麼替換函數不能返回結果字符串,而不是隻有1
,如果它的工作。然而,這是Perl早期的設計決定。否則,這會發生什麼?
$foo = "widget";
if ($foo =~ s/red/blue/) {
print "We only sell blue stuff and not red stuff!\n";
}
生成的字符串仍然是widget
,但替換實際上失敗了。但是,如果替換返回結果字符串而不是空字符串,那麼if
仍然是true。
然後,考慮這種情況下:
$bar = "FOO!";
if ($bar =~ s/FOO!//) {
print "Fixed up \'\$bar\'!\n";
}
$bar
現在是一個空字符串。如果替換返回結果,它將返回一個空字符串。然而,替換實際上成功了,我想我的if
是真實的。
在大多數語言中,替代函數返回生成的字符串,你必須做這樣的事情:
if ($bar != replace("$bar", "/FOO!//")) {
print "Fixed up \'\$bar''!\n";
}
如此,因爲一個Perl的設計決定的(基本上以更好地模擬awk
語法) ,沒有簡單的方法去做你想做的事。然而,你可以這樣做:
($foo = $bar) =~ s/regex/replacement/;
doStuff($foo);
這將在$foo
地點的設置做一個不首先分配給它的$bar
值。 $bar
將保持不變。
愚弄http://stackoverflow.com/questions/3321400/how-to-do-perl-inline-regex-without-setting-to-a-變量 – daxim 2010-07-26 04:26:02