有之间的关系阵列和散列:
my %hash = (one => 1, two => 2, three => 3);
这创建在3成员散列,密钥为one
,two
和`三。那么是这样的:
my %hash = ("one", 1, "two", 2, "three", 3);
其实这两条语句完全一样。 =>
是一种形式句法糖用于突出显示一个值与另一个值之间的关系。再次是同一行。我只是在这一个你的大脑搞乱,但它会产生相同的散列为前:
my %hash = ("one", 1 => "two", 2 => "three", 3);
这里的分配相同的哈希值的另一种方式:
my @array = ("one", 1, "two", 2, "three", 3);
my %hash = @array;
,这也是有效的太:
my @array = %hash;
在Perl中哈希和数组之间有很强的关系。如果你在一个哈希上下文中使用一个数组,它就变成了一个哈希。如果你在数组上下文中使用散列,它将成为一个数组。 例如:
mysub (%hash);
sub mysub {
my %subhash = @_;
...
}
这是通过散列到的子程序的有效(尽管不是推荐的方法)。散列被翻译成@_
数组,然后在子例程中被转换回散列。
让我们来看看你的循环:
for my $k1 (%read_data) {
的(...)
是一个列表/阵列的情况下,从而将您的%read_data
哈希,并在列表环境中,每个关键其次是目前它其值。
有几种方法可以解决这个问题。一种方法是使用keys提取散列中的所有密钥并返回密钥数组。这通常与sort相结合,将键排列成某种秩序的外表。
for my $k1 (sort keys %read_data) {
另一种是用它返回一系列具有一个密钥和一个值的两个构件阵列的each。
您向我们展示了您的输入,但不是用于生成输出的代码。 – Quentin
我忘了keys关键字以及生成调试输出的内容。所有照顾在OP。 – octopusgrabbus
'使用Data :: Dumper;打印Dumper(\%read_data);' – toolic