Perl Learning - 15 (s///)

s/// is the most common expression using RE to do "search and replace".
 
s/patten/replace/ searches the 'patten' and replaces it to 'replace'.
 
'patten' is the patten we talked in perlRE,it can be a variable though.
'replace' is the characters whichever you want to replace the result of search,it can be variable too.
 
$_="He's out bowling with Barney tonight.";
s/Barney/Fred/; # Barney replaced by Fred
s/with (\w+)/agaist $1's team/;
print "$_\n";
 
s/// returns a value: replace success returns true,failure returns false.
 
$_="fred flintstone";
if(s/fred/wilma/){
 print "Successfully replaced fred with wilma!\n";
 print "$_\n";
}
 
/g flag can replace all the result,instead of once by default.
 
$_="home,sweet home!";
s/home/cave/g;
print "$_\n";
 
$_="   Input     data may have      extra whitespace.  ";
s/\s+/ /g;
print "$_\n";
 
Above example is used to compress multiple whitespaces to one single space.
 
We can use other symbol in other then s///
 
$_="   Input     data may have      extra whitespace.  ";
s<\s+>[ ]g;
s(^\s+)<>g;
s#\s+$##g;
print "$_\n";
 
Note if use the patten symbols different from replace symbols,they need two pairs of () [] {} ... those pair'ed symbols. /// ### !!! ... those single don't have to.
 
Flags /i /x /s used in m// can also be used in s///
 
$_="hello 1
hello 2
wilma again
LOL
Fred,WILMA come on!
_ _END_ _
line 1
line 2
line 3";
 s#wilma#Wilma#gi;
 s{_ _END_ _.*}{}gs;
 print;
 
All wilma/wiLMA/WIlmA are replaced by Wilma,lines starting with '_ _END_ _' all are deleted.
 
Also,=~ can be used to replace variables other than $_ by default.
 
$file_name =~ s#^.*/##s; # remove all unix style path
 
/U changes all characters after it to upper case;
/L changes all characters after it to lower case;
/E close the window of /U or /L;
/u changes one character after it to upper case;
/l changes one character after it to loser case;
/u/L changes one character after it to upper case and all other characters to lower case;
/l/U changes one character after it to lower case and all other characters to upper case.
 
$_ =“I saw Barney with Fred.”;
s/(fred|barney)/\U$1/gi;
 
$_="I saw barney with FREd.";
s/(\w+) with (\w+)/\u\L$2\E with \u\L$1/i;
print "$_\n";
 
They can be used in " " as well:
 
$name="fred flintstone";print "Hello,\L\u$name\E,would you LIKE to play a game?\n";

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...