我已经类似于下面的Perl代码:在Perl中,未初始化的散列键的默认值为零吗?
# -- start --
my $res;
# run query to fetch IPv6 resources
while(my $row = $org_ip6_res->fetchrow_arrayref)
{
if($row->[4] =~ /PA/) {
$res->{ipv6}{pa}{$row->[2]}++;
} elsif($row->[4] eq 'PI') {
$res->{ipv6}{pi}{$row->[2]}++;
}
}
# -- stop --
在任何时候被$res
以往迭代查询结果之前还设置代码运行得很好。
当我在每个值之前放置打印语句时,在两种情况下都会得到空白,但如果打印语句在应用增量后出现,则取值> = 1,具体取决于组织有多少IPv6资源。
我的问题是,我是否认为在Perl中未初始化的散列键自动具有零值?
很抱歉,如果它要像一个新手的问题,但我只是不熟悉这样的结构 即$hashref->{foo}->{bar}++
其中一个值尚未被明确指定为$hashref->{foo}->{bar}
。提前致谢!
exists关键字测试以查看密钥是否在哈希中,而不是该值是否为undef。 使用Test :: More tests => 4; my%h =('a'); ok(存在$ h {a}); ok(!defined $ h {a}); ok(!exists $ h {b}); ok(!defined $ h {b}); – Axeman 2009-05-01 18:42:34
我知道。关键是他需要了解自动版化和存在但未定义的关键字与未定义关键字之间的区别以及如何处理每个关键字 - 如果他遵循我提供的链接并阅读关于exists关键字的文档。 – 2009-05-02 19:04:17