这个用perl怎么排序

这个用perl怎么排序

综合后的时序报告有violation,我想把violation全部排序输出到另外一个文件里,比如tmp,
现在我已经将violation行都提取出来输出到tmp里了,可是我想对violation的时间按从大到小排序,用Perl脚本来做的
比如现在tmp是

violation     -1.2
violation     -0.5
violation     -2.0
................

我想排成
violation     -2.0
violation     -1.2
violation     -0.5
................

该怎么实现
#!/usr/bin/perl -w

foreach ( reverse sort map { ( split /\s+/ )[ 1 ] } <> ) {
    print "violation\t$_\n";
}




QUOTE:
原帖由 fengc 于 2008-10-10 07:02 发表
#!/usr/bin/perl -w

foreach ( reverse sort map { ( split /\s+/ )[ 1 ] }  ) {
    print "violation\t$_\n";
}

好复杂,谢谢楼上,我仔细看看,嘿嘿
查书看了,没怎么明白,后面那个  [1]是什么意思啊???


QUOTE:
原帖由 lausren 于 2008-10-10 11:07 发表
查书看了,没怎么明白,后面那个  [1]是什么意思啊???

取split返回的列表的第2个成员


QUOTE:
原帖由 ynchnluiti 于 2008-10-10 11:16 发表

取split返回的列表的第2个成员

谢谢楼上的,取他的第二个成员也就是 那个数字,这样map成 散列, 数字成为散列里的值,然后sort一下,它怎么知道是按数字来sort啊? 还是sort默认就是按散列里的值来sort?

最后还reverse一下干吗?

太菜了,呵呵,第一次用,我做芯片设计的,第一次用这个处理一个报告文件,谢谢老大们
不倒序是按从小到大排的~~


QUOTE:
原帖由 lausren 于 2008-10-10 11:45 发表


谢谢楼上的,取他的第二个成员也就是 那个数字,这样map成 散列,

map 返回的值是个 list, “散列”这个词有另外的意思。