my @output =
map $_->[0],
sort{$a->[1] <=> $b->[1]}
map [$_,-s $_],
@array;
有人可以更详细地解释一下代码吗?我不能得到它的头部或尾部..
答案 0 :(得分:10)
自下而上阅读:
@array
一个数组(文件名,稍后使用)。
map [$_,-s $_],
对于每个文件名,获取对两元素匿名数组的引用,第一个元素是文件名,第二个元素是文件的字节大小。 map返回这些数组引用的列表。
sort{$a->[1] <=> $b->[1]}
通过增加文件大小对数组引用列表进行排序。
map $_->[0],
将数组引用列表转回文件名列表,但现在按排序顺序。
my @output =
将列表保存在@output中。
这相当于以下功能:
my @output = sort { -s $a <=> -s $b } @array;
但只能获得每个文件的大小一次,而不是按排序进行每次比较一次。
答案 1 :(得分:4)
维基百科有一个详细的explanation and analysis