|
如果将m// 这个模式匹配看作同文字处理器的“查询(search)”类似的功能,那Perl 中s ///操作的则类似于“查询并替换
(search and replace)”。它将替换变量中◆模式所匹配上的部分:
◆同m//不一样,m//可以和任何字符串表达式进行匹配,s///只能修改被称为左值(lvalue)的数据。这通常是一个变量,虽然它可以是任
何可在赋值符左侧出现的东西。
$_ =“He’s out bowling with Barney tonight.”;
s/Barney/Fred/; #Barney 被Fred 替换掉
print “$_\n”;
如果没有匹配上,则什么也不会发生,此变量也不会有任何更改:
#接上例:现在$_ 为“He’s out bowling with Fred tonight.”
s/Wilma/Betty/; #用Wilma 替换Betty(失败)
模式和被替换的字符串可能更复杂。下例中,替换的字符串使用了变量:$1,其值由模式匹配所赋值:
s/with (\w+)/agaist $1’s team/;
print “$_\n”; #为“He’s out bowling against Fred’s team tonight”;
下面还有些其它可能的替换方法。(它们在这里只是作为例子出现。在实际代码中,很少在一行中做这么多不相关的替换。)
$_ =“green scaly dinosaur”;
s/(\w+) (\w+)/$2, $1/; #现在为“scaly, green dinosaur”;
s/^/huge, /; #现在为“huge, scaly, green dinosaur”
s/,.*een//; #空替换,现在为“huge dinosaur”
s/green/red/; #匹配失败,仍然为“huge dinosaur”
s/\w+$/($`!)$& /; #现在为“huge (huge !)dinosaur”
s//\s+(!\W+)/$1 /; #现在为“huge (huge!) dinosaur”
s/huge/gigantic/; #现在为“gigantic (huge!) dinosaur”
s///会返回一个Boolean 值。如果成功替换则返回true;否则返回false:
$_ = “fred flintstone”;
if(s/fred/wilma/){
print “Successfully replaced fred with wilma!\n”;
} |
|