我怎么能用`\ sort ...`?

时间:2017-03-24 10:04:16

标签: perl reference

我想知道\sort ...返回什么。

执行以下行

my $y = \sort qw(one two three four five);

$y是对标量的引用。我实际上期望对数组的引用:具有已排序元素的数组(五,四,一,三,二)。解除引用$y(例如print $$y)时,我得到two,这是排序列表的最后一个元素。

\sort(...)有什么用处吗?

2 个答案:

答案 0 :(得分:5)

根据perldata将标量分配给值列表,将列表的最后一个值分配给标量。所以

$foo = ('cc', '-E', $bar);

将变量$bar的值赋给标量变量$foo

根据perlref, 引用枚举列表与创建引用列表相同。因此,

my $y = \sort qw(one two three four five);

相当于

my $y = \(sort qw(one two three four five));

相当于

 my $y = \(sort qw(one two three four five))[-1];

将引用已排序列表的最后一个值,即标量值" two"。

答案 1 :(得分:4)

sort会返回一个列表。

\LIST(如\($x,$y,42))生成另一个列表,其中包含对原始列表(\$x,\$y,\42)的每个元素的引用。

因此\sort ...返回对排序列表元素的引用。

现在在标量上下文中,$foo = LIST指定列表的最后一个元素。完全放在这一点,

my $y = \sort qw(one two three four five);

将对最后排序元素的引用分配给$y

print $$y;        # "two"

我想不出这个功能的任何好的用例,但这不是一个不存在的非常好的证据。