2013-05-09 70 views
0

我碰到这段代码(修改节选)来的?为什么不简单地做的Perl Autovivication使用情况

my $respMap; 
my @respIdArray; 
foreach my $respId (@$someList) { 
     push(@respIdArray, $respId); 
} 
$respMap->{'ids'} = \@respIdArray; 
return $respMap; 

后续行动:有人可以给我一个很好的autovivication用例吗?

+0

当'@ $ someList'为空时,您的重写会引入细微差别。另外,我很好奇你为什么只重写了隐式arrayref分配,而不是隐式hashref分配。 – pilcrow 2013-05-09 17:56:42

回答

1

无论哪种方式是正确的;第一个使用数组参考$respIdArray和第二个普通数组@respIdArray。在构建复杂的数据结构时(检查perldoc perlreftut),您将需要数组引用,但除此之外,取决于您选择哪一个。

请注意,在这两种情况下,您都将数组引用分配到$respMap->{'ids'},所以示例实际上非常相似。

顺便说一句,autovivification是另一回事,它与动态创建数据结构有关。

1

当处理深层结构时,Autovivication更有用。

push(@{$hash{'key'}{$subkey}}, 'value');