众所周知Perl处理字符串的功能非常强大,Perl(Practical Extraction and Reporting language)处理格式的功能也非常强大。这节我们就开始学些Perl的格式和字符串处理。这些程序以后都可以直接拷贝使用,每段小程序以#隔开。
学习Perl推荐使用Perl IDE(功能虽然无法和VS 2005,Eclipse 3.1那样功能那样强大),但是其支持断点处理功能,已经比直接使用命令行功能强大多了。 此免费软件的下载点:http://open-perl-ide./ 其他Perl软件列表看此推荐:http://www./blog/p/perlidesumm.php
Perl格式处理 #1.format format STDOUT= @<<<<<<<<@||||||||@>>>>>> @.## @.###### $string1,$string2,$string3,$pi,$pi . $string1="zhang"; $string2="love"; $string3="chan"; $pi="3.1415926"; write; ########## $display=1; if($display) { $here= <<EOD; zhang bufeng love EOD print "$here\n"; } ######## $: =""; format STDOUT= Name:^<<<<<<<<<< $person Sex:^<<< $person Age:^< $person . $person="zhangbufengmale23"; write; ######## format standformat_top= @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< "Page $%"
Employees FirstName LastName ID Extension ----------------------------------------- . format standformat= @<<<<<<<<<<<@<<<<<<<<<<<@<<<<<<@<<<<< $firstname $lastname $ID $extension . $firstname=" $lastname="Grant"; $ID="123"; $extension="x45";
open(FILEHANDLE,">>D:\\perlproject\\page.txt") or die("can't open this file"); select FILEHANDLE; $~=standformat; $^=standformat_top; $==1; for($loop=1;$loop<10;$loop++) { write; } Perl字符串处理 熟悉其最强大的三个函数:substr,pack,unpack! #大小写处理函数 lc(转为小写) uc(转为大写) $text="ZhangBufeng"; $text2=lc $text; $text3=uc $text; print "$text2\n"; print "$text3\n"; #将第一字母变为小写(lcfirst),将第一个字母大写(ucfirst) $string="zhang"; $string2=lcfirst $string; $string3=ucfirst $string; print "$string2\n"; print "$string3\n"; #顺序查找string位置(index),逆序查找string位置(rindex) $string="zhang bu feng zhang bu feng"; $position1=index($string,"bu"); $position2=index($string,"bu",10); $position3=rindex($string,"zhang"); $position4=rindex($string,"zhang",10); print "$position1,$position2,$position3,$position4\n"; #获取子串函数substr,功能非常强大,可以直接支持以一个字符串代替字符串的一个子串。 #字符串处理的MVP $text="Zhang bufeng 爱 ChanChan"; $replace_to="爱"; $replace_with="喜欢"; substr($text,index($text,$replace_to),length($replace_to),$replace_with); print "$text\n"; #pack和unpack函数用于字符串的打包和解包,功能非常强大,支持多种打包格式 #字符串处理的MVP $decimal=17; $newdecimal=unpack("B32",pack("N",$decimal)); print "$newdecimal\n";
$string="张步峰爱中国"; @array1=unpack("c*",$string); @array2=unpack("C*",$string); print (join(",",@array1),"\n"); print (join(",",@array2),"\n"); $string1=pack("c*",@array1); $string2=pack("C*",@array2); print "$string1\n"; print "$string2\n";
#打印格式sprintf $value=1234.56789; print sprintf "%.4f\n",$value; #字符串比较函数 eq,ne,cmp,lt,gt,le,ge.使用cmp就好。 $string1="步峰"; $string2="步峰"; if($string1 eq $string2) { print "$sting1==$string2\n"; } if($string1 ne $string2) { print "$string1!=$string2\n"; } if( ($string1 cmp $string2)==0) { print "$string1==$string2\n"; } $string1="zhang"; $string2="chan"; if($string1 lt $string2) { print "left < right \n"; } if($string1 gt $string2) { print "left > right \n"; } if($string1 le $string2) { print "left < right \n"; } if($string1 ge $string2) { print "left > right \n"; } # $string="张步峰爱中国"; @array=split(//,$string);#这种方法无法将其进行分成"张","步","峰","爱","中","国"等单字 print (join(",",@array),"\n");
#演示中文字符夹带英文字符的反序(使用了多个函数) print "------begin-----\n"; $string1="中国love!张步峰"; @array=unpack("C*",$string1); $length=$#array;#此数组的最后一个下标 for(;$length>=0;) { if($array[$length]<=128) { #英文或者标点 push(@array2,$array[$length]); $length=$length-1; } else { #中文字符 push(@array2,$array[$length-1]); push(@array2,$array[$length]); $length=$length-2; }
} $string2=pack("C*",@array2); print "$string2\n"; # $dir=dir; print qx/$dir/; @name=qw/zhang bu feng chan chan/; print join(",",@name);s
参考资料:《Perl 技术内幕》 Black Book Steven Holzner |
|
来自: bigyellowdoc > 《编程》