Perl:从数组哈希的哈希中复制数组

时间:2016-01-15 14:49:04

标签: arrays perl hash

鉴于HoHoA

my %FIELDS = (
    LA => {
      NAME => [1],
      ADDRESS => [2,3,4,5],
      TYPE => [6],
      LICENCE => [0],
      ACTIVE => [],
    },
...
);

我正在尝试制作特定数组的副本

my @ADDRESS_FIELDS = @{$FIELDS{$STATE}->{ADDRESS} };

由于%FIELDS内的所有内容都是引用,因此箭头取消引用内部哈希,@ {}取消引用数组。 (我知道箭头不是绝对必要的)

print $ADDRESS_FIELDS[3]."\n";
print @ADDRESS_FIELDS."\n";

给出

5
4

第一个打印行为符合预期,但第二个打印给我标量值,我假设,引用的数组而不是新副本。我哪里误入歧途?

3 个答案:

答案 0 :(得分:4)

连接运算符强制其操作数上的标量上下文。请改用逗号:

print @array, "\n";

请注意,元素由$,分隔,默认为空。

或者,要在输出中将数组元素分隔$"(默认为空格),请使用

print "@array\n";

或者,自己加入:

print join(' ', @array), "\n";

答案 1 :(得分:1)

cat my.pl 
#!/bin/perl
#
use strict;
use warnings;
use Data::Dumper;

my %FIELDS = (
    LA => {
        NAME => [1],
        ADDRESS => [2,3,4,5],
        TYPE => [6],
        LICENCE => [0],
        ACTIVE => []
    },
);

my @addy = @{$FIELDS{LA}->{ADDRESS}};
foreach my $i(@addy){
    print "i=$i\n";
}
perl my.pl
i=2
i=3
i=4
i=5

答案 2 :(得分:0)

print @ADDRESS_FIELDS."\n";

在标量上下文中计算数组并​​返回元素数(在您的情况下为4)。

print join(', ', @ADDRESS_FIELDS)."\n";

是你想要的。

HTH