下面是我的代码(只是使用哈希),我想创建一个数组哈希(键分配给数组)。但我得到输出作为数组引用。为什么要显示此数组引用?
#!/usr/bin/perl
my @result = (0,0,0);
my @operator = ('AP', 'MP', 'UP');
my %operator_res;
for ( $i = 0; $i <= $#operator; $i++ ) {
if ( $i == 2 ) {
@result = (4,5,6);
} elsif ( $i == 1 ) {
@result = (1,2,3);
}
@{$operator_res{$operator[$i]}} = @result;
}
foreach $keys (%operator_res) {
print "$keys:";
#print "@{$operator_res{$keys}}\n";
print "$operator_res{$keys}[0], $operator_res{$keys}[1], $operator_res{$keys}[2]\n";
}
输出
UP:4, 5, 6
ARRAY(0x17212e70):, , Why is this array reference printing?
AP:0, 0, 0
ARRAY(0x17212e00):, ,
MP:1, 2, 3
ARRAY(0x17212e20):, ,
答案 0 :(得分:4)
foreach $keys (%operator_res)
应该是
foreach $keys (keys %operator_res)
答案 1 :(得分:1)
您的foreach
循环遍历%operator_res
的每个元素,而不仅仅是密钥。正如ikagim已经回答的那样,你必须使用keys
来获取哈希的密钥。
如果您在Data::Dumper
上看%operator_res
输出为
$VAR1 = 'UP';
$VAR2 = [
4,
5,
6
];
$VAR3 = 'AP';
$VAR4 = [
0,
0,
0
];
$VAR5 = 'MP';
$VAR6 = [
1,
2,
3
];
如您所见,每个元素总会得到两次迭代:一个用于键,另一个用于数组ref。
答案 2 :(得分:0)
Perl中的哈希值必须是标量。要模拟多维哈希,请将 references 的值用于哈希或数组。
该行
@{$operator_res{$operator[$i]}} = @result;
你问题中的相当于
$operator_res{ $operator[$i] } = [ @result ];
也就是说,当时与键$operator[$i]
关联的值是引用到新数组,其内容与@result
相同。
有很多例子,请阅读perllol documentation。
答案 3 :(得分:0)
您可以使用Data :: Dumper以格式良好的方式打印数据:
use Data::Dumper;
print Dumper(\%operator_res);
问:为什么这个数组引用打印?
答:由于这一行:打印“$ keys:”;