【发布时间】:2016-09-29 02:01:21
【问题描述】:
我正在阅读中级 Perl 书籍,在第 10 章中有这段代码。我添加了一些打印语句,但核心逻辑没有改变。
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my @input = qw(Gilligan Skipper Professor Ginger Mary Ann);
my @sorted_positions = sort { $input[$a] cmp $input[$b] } 0 .. $#input;
print Dumper( \@sorted_positions );
my @ranks;
@ranks[@sorted_positions] = ( 1 .. @sorted_positions );
print Dumper( \@ranks );
foreach ( 0 .. $#ranks ) {
print "$input[$_] sorts into position $ranks[$_]\n";
}
当我检查 Dumper 输出时,它正在打印 @sorted_positions 数组
$VAR1 = [
5,
0,
3,
4,
2,
1
];
这对我来说很有意义,但是对于 @ranks 数组,它正在打印
$VAR1 = [
2,
6,
5,
3,
4,
1
];
我无法理解这条线在做什么。
@ranks[@sorted_positions] = ( 1 .. @sorted_positions );
我能够理解输出对于程序的含义,但无法理解输出是如何产生的,即 perl 在该语句中到底做了什么。
【问题讨论】: