我正在閱讀倫敦的「impatient perl」。我正在測試「參考」一章中的一個例子。我很奇怪,爲什麼在自動激活參考我需要把一些(任何數字)[]內,而在聲明數組,我可以只使用[]作爲空數組。謝謝。perl autovivification數組
#!/usr/bin/env perl
use warnings;
use strict;
use Data::Dumper;
my $scal;
my $val = $scal->[2]->{somekey}->[1]->{otherkey}->[7];
# fails if [] instead of [7] or [1] or [99999];
# same result if [7] or [1] or [99999] is used;
$val->[3] = 19;
print Dumper $scal;
print "========\n";
print Dumper $val;
print "========\n";
print Dumper []; # this does not fail;
錯誤消息是「在referenceTest.pl線7語法錯誤,接近‘[]’ 全局符號‘$ VAL’要求在referenceTest.pl的referenceTest.pl線15.Execution中止明確包名由於彙編錯誤。「
================== 而當它工作使用[7],結果是:
$VAR1 = [
undef,
undef,
{
'somekey' => [
undef,
{
'otherkey' => []
}
]
}
];
========
$VAR1 = [
undef,
undef,
undef,
19
];
========
$VAR1 = [];
感謝您啓發了我。
有'的[]'這裏有兩個用途。 '$ scal - > [2]'進行數組索引查找。 '[]'創建對匿名數組的引用。 – aschepler