【发布时间】:2011-06-26 19:50:15
【问题描述】:
my @output =
map $_->[0],
sort{$a->[1] <=> $b->[1]}
map [$_,-s $_],
@array;
有人可以更详细地解释代码吗?我无法理解它的头部或尾部..
【问题讨论】:
标签: perl
my @output =
map $_->[0],
sort{$a->[1] <=> $b->[1]}
map [$_,-s $_],
@array;
有人可以更详细地解释代码吗?我无法理解它的头部或尾部..
【问题讨论】:
标签: perl
自下而上阅读:
@array
一个数组(文件名,稍后给出)。
map [$_,-s $_],
对于每个文件名,获取对双元素匿名数组的引用,第一个元素是文件名,第二个元素是文件的字节大小。 map 返回这些数组引用的列表。
sort{$a->[1] <=> $b->[1]}
通过增加文件大小对数组引用列表进行排序。
map $_->[0],
将数组引用列表转回文件名列表,但现在按排序顺序。
my @output =
将列表保存在@output 中。
这在功能上等同于:
my @output = sort { -s $a <=> -s $b } @array;
但只获取每个文件的大小一次,而不是每次排序完成的比较一次。
【讨论】:
<=> 将比较两个参数并返回 1、0 或 -1,表示大于、等于或小于。
perldoc perlop查找不熟悉的运算符。 <=> 运算符包含在 Equality Operators 部分中。 perldoc.perl.org/perlop.html#Equality-Operators
维基百科有详细的explanation and analysis
【讨论】: