arj*_*ini 1 memory perl hash hashmap
以下子例程用于迭代节点数组(每个节点的哈希值都有一个大陆)并返回所有国家/地区的列表:
sub getContinentsServed{
my $self = shift;
my $temp = $self->{cityListRef};
my %hash = {};
my $h_ref = \%hash;
foreach my $cont (@{$temp}){
$h_ref->{$cont->{continent}} = '1';
}
print "Continents Served: ";
foreach my $coord (keys %hash){
print $coord;
print " , ";
}
}
Run Code Online (Sandbox Code Playgroud)
我很确定这包含所有正确的数据,但是当我尝试打印这些值时,我得到了这个结果:
Continents Served: Australia Europe North America South America Asia Africa HASH(0x100949a70)
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么我会得到最后一个元素HASH(0x1009...).我宁愿这不会出现,但我所做的只是迭代键,所以我不确定为什么或如何那样.
my %hash = {};
Run Code Online (Sandbox Code Playgroud)
是坏是坏.这是设置%hash为包含一个条目,其中键是字符串化的值{}(哈希引用,因此它将是一个字符串HASH(0xblahblah)),值为undef.
你真正需要写的只是my %hash;(或者my %hash = ();已经隐含了,所以没有必要写它).或者你可以做到my $h_ref;并且从不使用%hash({}由于自动修复,初始化仍然是不必要的).
如果你use warnings打开了,你至少会得到一个"哈希中奇数个元素"或"找到偶数大小列表所需的参考"(取决于你的perl的年龄)警告该行给你一个提示那里出了点问题.