鉴于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
第一个打印行为符合预期,但第二个打印给我标量值,我假设,引用的数组而不是新副本。我哪里误入歧途?
答案 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