我不理解perl中的@unordered {@array}

时间:2014-04-16 08:13:48

标签: perl

我是Perl中没有经验的程序员。我已经读过这本书开头Perl Curtis“Ovid”Poe并且对这段代码有疑问。

#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
my @array = ( 3, 4, 1, 4, 7, 7, 4, 1, 3, 8 );
my %unordered;
@unordered{@array} = undef;
foreach my $key (keys %unordered) {
print “Unordered: $key\n”;
}

@unordered {@array} = undef;

这段代码是什么意思? 有人能解释一下吗?

3 个答案:

答案 0 :(得分:4)

@unordered{@array} = undef

这称为hash slice。您可以阅读更多about it hereherehere。换句话说,它作用于哈希的多个键(键由@array描述,在这种特殊情况下,它为每个键分配值undef

答案 1 :(得分:1)

我假设它是为了向你展示关于哈希键的一些事情。 您拥有@array,然后在哈希%unordered中创建条目,其中数组中的值为键,没有值。这发生在这一行:

@unordered {@array} = undef;

然后,遍历该哈希的所有键并打印它们。因此,您可以看到它们具有哪些键以及它们在哈希中的顺序。 您可能会注意到每个键只存在一次,尽管数组中有多个值不止一次。这是因为哈希的键始终是唯一的。 此外,您可以看到键的顺序没有特定的顺序,因为哈希的键可以按照实现的任何方式进行排序。

答案 2 :(得分:0)

是的,我理解你向我解释的所有内容。 Tkank你的时间。

但是为什么,首先我们用数字启动一个数组,然后创建一个哈希(空白哈希),然后我们用哈希值创建条目,无序,数组中的值为键,没有值。

通过in循环,我们使用"%" (%无序)。我们更改数组" @ array"哈希"%无序",然后我们使用in循环再次%无序。

看起来有点奇怪