实际上,当我尝试初始化 Perl Hash(ref) 并尝试立即通过autovivication分配它时,我发现了一个奇怪的行为。这是一个简短的代码片段,使其更清晰:
use Data::Dumper;
my $hash->{$_} = 'abc' foreach (1..4);
print Dumper $hash;
打印:
$VAR1 = undef;
当我这样尝试时:
use Data::Dumper;
my $hash;
$hash->{$_} = 'abc' foreach (1..4);
print Dumper $hash;
我明白了
$VAR1 = {
'4' => 'abc',
'1' => 'abc',
'3' => 'abc',
'2' => 'abc'
};
这是我所期望的。所以问题是 的(多个)初始化$hash
。
我知道,map
这里的使用方式是一个更好的解决方案:
use Data::Dumper;
my $hash = { map { $_ => 'abc' } (1..4) };
print Dumper $hash;
现在我的问题:为什么一次初始化和分配的方式会失败?