专注各种脚本编程
Baidu
加入收藏夹
本站内容有下面分类知识,欢迎您的到来^_^
shell相关:指令篇 基础篇 脚本欣赏 编程实例 shell问问 shell视频教程 技巧篇 水平测试 E文资料 vi编辑器 高级Bash脚本编程指南
其他:mysql perl c语言 oracle
当前位置:| 主页>perl>

Perl下sort,map的特别用法

百度收藏 QQ搜藏

http://www.chinaunix.net 作者:apile
下面这种用法很多perl高手都会用到,不要说看不懂,学Perl干嘛的...
1. 这是把passwd里面的內容按照user id大小来排序,如果要反向排序只要把$a和$b对调就可以。
open PWD "/etc/passwd";
@passwd = <PWD>;;
@key = map { ([color=red]split[/color] /:/)[2] } @passwd;
@by_uid =@passwd[sort { $key[$a] <=>; $key[$b] } 0..$#key];

2.Oricish Maneuver:很奇怪的名称
 @sorted = sort {-M $a <=>;-M $b } @files; 依照modified時間来排序
但是-M使用得太频繁了,所以改良为
@sorted = sort { 
  ($m{$a} ||= -M $a) <=>;($m{$b} ||=-M $b)
} @files;
因为||=与hash的关系,所以使用-M的次数会少很多,有n个element就只使用n次.. 原本的-M $a <=>;-M $b比较沒有效率..

3.Schwartizian Transform:
@sorted_name = map {$_->;[0] }        # 取出原本的filename
    sort { $a->;[1] <=>; $b->;[1]  }  #--依照modified_time去比大小
    map { [$_,-M] }                   #--[filename,modified_time]
   @files;                  #----输入的所有filename
open(PWD,"/etc/passwd");
@by_uid = 
   map { $_->;[0]}
   sort {$a->;[1] <=>; $b->;[1] }
   map { [$_,(split /:/)[2]] }
  <PWD>;;

看到了吧,是不是很神奇,perl很神奇的...

上一篇:perl下常用的文件数据(File test)运算符 下一篇:利用Perl的hash数组实现数据库监控

power by soyo123 2007-2008