Perl中倒序字符串或列表

 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 的值

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值