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很神奇的... |