频道直达:新闻 - 组网 - 安全 - 服务器 - 存储 - 系统 - 应用 - 开发 - 数据库 - 前沿 - 技术人 - 培训 - 求职 - 读书 - 教程 - 专题 - 产品 - 案例 - 技术圈 - 博客 - BBS
51CTO.COM_中国领先的IT技术网站
找资料:

Perl中倒序字符串或列表

作者: Orange 出处:Csdn博客 2007-11-02 10:10    砖    好    评论   进入论坛
阅读提示:本文介绍了三种Perl中实现倒序字符串或列表的方法,供大家参考!

【引自Orange的博客】Perl被设计成90%擅长处理文本,10%处理其余的问题。因此Perl有强大的文本处理能力,包括正则表达式和方便的字符串处理函数。

用unpakc倒序字符串的方法:

perl -e '$i=sub{length($_[0])-1};$_= "\n.rekcah lreP rehtona tsuJ" ;
while(&$i($_)){print unpack "x".&$i($_)."a1", $_ ;$_=unpack"a".&$i($_),$_}print' 

将其重新排列为一下格式:

$i=sub{
length($_[0])-1
};
$_= "\n.rekcah lreP rehtona tsuJ" ;
while(&$i($_)){
print unpack "x".&$i($_)."a1", $_ ;
$_=unpack "a".&$i($_),$_
}
  
$i为一个匿名过程引用,能够给出参数字符串长度减1的值。

第二个语句给默认变量$_赋初值,仍旧是"Just another Perl hacker.\n"的倒序。

下面的while循环是核心内容,该循环直到$_的内容为空才会停止。循环中用unpack取得$_的最后一个字符并打印出来,然后再从$_中剔除这个字符,如此反复就达到了把原字符串倒序输出的目的。

下面简单说一下这里unpack的用法,unpack格式串中x表示跳过该位置的内容,a表示将该位置的内容解释为标准ASCII字符(串),因此如果有unpack "x10a1",$_就表示跳过$_的前10个字符,返回第11个字符;同样unpack "a10",$_表示返回前10个字符。配合使用格式字符x和a就能达到将原内容从最后一个字符处拆分的目的。

unpack和pack是一组很有用的对应函数,在对各种数据的底层操作中得到广泛使用,灵活掌握它们的用法会带来很大好处。对它们更详细的解释可以参见perlfunc手册页。

用substr倒序字符串的方法:

len=length(str);

for(i=count;i>0;i--) {
marry[i] = substr(str,int(rand() * len),1); }

for(i=count;i>0;i--) {
printf("%c",marry[i]);
}
printf("\n");

for(i=0;i<=count;i++){
printf("%c",marry[i]);  }

用reverse倒序列表的方法:

reverse(逆转)操作将输入的一串列表(可能是数组)按相反的顺序返回。如果不喜欢范围操作符: ..,只能从小到大,那可以使用reverse 来解决这个问题:

@fred = 6 ..10;
@barney = reverse (@fred);  #得到10,9,8,7,6
@wilma = reverse 6 ..10;  #同上,没有使用额外的数组
@fred = reverse @fred;      #将逆转过的字符串存回去

注意最后一行,其中@fred 使用了2 次。Perl 通常先计算变量的值(赋值号右边),再进行赋值。注意reverse 返回逆转的列表,它不会改变其参数的值。如果返回值没有赋值给某个变量,那这个操作是没有什么意义的:

reverse @fred;  #错误,没有改变@fred 的值
@fred = reverse @fred;  #改变了@fred 的值

【相关文章】

【责任编辑:火凤凰 TEL:(010)68476606】

专题
访问控制列表(ACL)介绍
Perl应用教程
初探敏捷开发
WCF开发基础
体验Visual Studio 2008的魅力
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 领 先 的 IT 技 术 网 站 ·
技 术 成 就 梦 想
·Java基础教程 (查看81024次)
·UML类图详解 (查看72498次)
·C++是垃圾语言?! (查看42631次)
·C#技术开发指南 (查看40232次)
·UML统一建模语言 (查看39205次)
·Java编程开发手册 (1198个砖)
·Java基础教程 (431个砖)
·C#技术开发指南 (311个砖)
·.NET开发手册 (254个砖)
·PB开发教程 (223个砖)
·Java编程开发手册 (658个好)
·Java基础教程 (578个好)
·.NET开发手册 (282个好)
·PB开发教程 (213个好)
·Delphi开发技术手册 (200个好)
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。