这篇文章主要介绍了Perl字符串和排序怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
Perl字符串和排序
1、使用索引寻找子串
Perl语言中查找的方法依赖于查找的地方。如果在一个大字符串中查找,那很幸运的,index函数可以帮你的忙。字符位置是从0开始编号的。
$where=index($big,$small);查找子串***次在大字符串中出现的地方,返回***个字符的位置,如果子串不存在,则返回-1。可以将位置数(positionnumber)想象成找到此子串所经过的字符。
my$where2=index($stuff,“w”,$where+1);#$where得到6,第三个参数给出了返回值的极小值。
你可能想知道某个子串***出现的位置。可以使用rindex函数来做到,返回距离字符串头的位置。
2、Perl语言中substr操作子串
substr只处理部分的字符串。$part=substr($string,$initial_position,$length);
一个字符串,一个从0开始编号的初始位置,以及子串的长度。返回值是一个子串。
如果请求的长度超过了字符串的长度,得到的是一个比你所希望的更短的结果。如果想明确要求到达字符串的结尾处,无论其或长或短,可以省略掉第三个参数。
初始位置可以是负的,表示从字符串结尾处开始(此时,-1表示***一个字符)
字符串中选择的相应位置是可以改变的:
my$string=“Hello,world!”;
substr($string,0,5)=“Goodbye”;#$string现在变成了“Goodbye,world!”
substr($string,-20)=~s/fred/barney/g;
susbtr:使用4个参数,第四个参数是替换的字符串:
my$previous_value=substr($string,0,5,“Goodbye”);
3、Perl语言中sprintf
sprintf函数的参数和printf的参数完全相同(除了可选的文件句柄外),但它返回的是被请求的字符串,而非打印出来。这对于希望将某个格式的字符串存入变量以供将来使用的情况非常方便。
my$data_tag=sprintf“%4d/%02d/%02d%02d:%02d:%02d”,$yr,$mo,$da,$h,$m,$s;
$date_tag得到像“2038/01/193:00:08”这样的值。格式化数字中的前置0的含义是,如果需要,在前面加上0,使之达到需要的宽度。
4、subbig_money
{
my$number=sprintf“%.2f”,shift@_;
1while$number=~s/^(-?\d+)(\d\d\d)/$1,$2/;#在do-nothing循环中,每一次加入一个逗号
$number=~s/^(-?)/$1\$/;#将美元符号放入合适的位置
$number;
}
5、Perl语言中高级排序
排序子程序返回一个值,表明这两个元素如何比较的。如果在最终结果中$a出现在$b之前,则其排序子程序返回-1。如果$b出现在$a之前,则返回1。如果$a和$b的顺序无关紧要,则子程序返回0。
subby_number{
if($a<$b){-1}elsif($a>$b){1}else{0}
}
要使用一个排序子程序,将它(不使用&)放在关键字sort和你要排序的列表之间。
my@result=sortby_number@some_numbers;许多的排序子程序的名字都由by_开头,来描述如何排序
我们不需要在排序子程序中申明$a和$b,以及给它们设置。如果做了,子程序将不能得到正确结果。我们让Perl为我们给$a和$b赋值,我们只需要写如何比较。
三向的比较数字操作符:太空船(spaceship)符号(<=>)。这个操作符比较两个数字,按照数字将其排序,并返回-1,0,1。subby_number{$a<=>$b}
字符串的三向操作符:cmp
subcase_insenstive{“\L$a”cmp“\L$b”}大小写无关的排序
当你的排序子程序像我们这里的那样简单时,你可以通过使用“inline”子程序来代替排序的名字,使之更简单,如:my@numbers=sort{$a<=>$b}@some_numbers;在当代的Perl程序中,几乎见不到独立的排序子程序。
my@descending=reversesort{$a<=>$b}@some_numbers;按照数字的降序方式排序
my@descending=sort{$b<=>$a}@some_nubmers;按照数字的降序方式排序
6、hashes中使用sort时,只是对hash的keys排序(按照字母表顺序排序)。现在我们将对hash的keys排序,其顺序由其对应的hash中的值决定。
subby_socre{$score{$b}<=>$score{$a}}
my%score=(“barney”=>,“fred”=>205,“dino”=>30);
my@winners=sortby_scorekeys%score;
subby_score_and_name{
$score{$b}<=>$score{$a}#按照降序的成绩
or
$acmp$b;#字母顺序的名字
}Perl语言中排序子程序可以有多级。
感谢你能够认真阅读完这篇文章,希望小编分享的“Perl字符串和排序怎么用”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。