Я читаю «нетерпеливый perl» от Лондона. Я тестирую пример из главы «Ссылка». Мне интересно, почему при автоподтверждении ссылки мне нужно поместить число (любое число) в [], тогда как при объявлении массива я могу просто использовать [] в качестве пустого массива. Благодарю.perl autovivification of array
сообщение#!/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, рядом с„[]“ Глобальный символ„$ Вэл“требует явного имя пакета на referenceTest.pl линии 15.Execution из referenceTest.pl прерванную из-за ошибок компиляции ».
================== И когда он работает, используя [7], результаты:
$VAR1 = [
undef,
undef,
{
'somekey' => [
undef,
{
'otherkey' => []
}
]
}
];
========
$VAR1 = [
undef,
undef,
undef,
19
];
========
$VAR1 = [];
Спасибо за просветить меня.
Есть два варианта использования '[]' здесь. '$ scal -> [2]' выполняет поиск индекса массива. '[]' создает ссылку на анонимный массив. – aschepler