我有类似以下的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
从未被设置,但代码仍然可以正常运行。
当我在每个值之前放置 print 语句时,两种情况下都会得到空白,但如果打印语句在增量应用之后出现,根据组织拥有的 IPv6 资源数量,将得到一个大于等于1的值。
我的问题是,我是否应该理解为,在 Perl 中,未初始化的哈希键自动具有零值?
如果这看起来像新手问题,对不起,我只是不熟悉这样的结构,即 $hashref->{foo}->{bar}++
,其中尚未明确分配给 $hashref->{foo}->{bar}
值。提前谢谢!
perl -w -e '$foo{bar}++'
不会警告未初始化的值。perl -w -e '$foo{bar} += 2'
也不会。.=
, '-=` 和 '--' 也没问题。然而,其他 X= 操作符会生成警告。 - daotoad$foo{bar}++
可以正常工作,但++$foo{bar}
不行。我希望我能回忆起确切的情况... - j_random_hacker