perl автовивификация массива

arrays perl autovivification

64 просмотра

2 ответа

2154 Репутация автора

Я читаю "нетерпеливый Perl" в Лондоне. Я тестирую пример из главы «Справочник». Мне интересно, почему при автовивификации ссылок мне нужно поместить число (любое число) в [], тогда как при объявлении массива я могу просто использовать [] в качестве пустого массива. Благодарю.

#!/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 15. Выполнение файла referenceTest.pl прервано из-за ошибок компиляции».

================== И когда он работает, используя [7], результаты:

$VAR1 = [
          undef,
          undef,
          {
            'somekey' => [
                           undef,
                           {
                             'otherkey' => []
                           }
                         ]
          }
        ];
========
$VAR1 = [
          undef,
          undef,
          undef,
          19
        ];
========
$VAR1 = [];

Спасибо, что просветили меня.

Автор: lisprogtor Источник Размещён: 19.07.2016 12:11

Ответы (2)


3 плюса

17649 Репутация автора

->[]обращается к записи массива. Конечно, вам нужен индекс для этого. Автовивификация является лишь побочным эффектом обращения к чему-то, чего не существует. Если вы хотите назначить вместо этого, то, как легко предположил бы Капитан Очевидность, используйте оператор присваивания =:my $val = ($scal->[2]->{somekey}->[1]->{otherkey} = []);

Автор: Oleg V. Volkov Размещён: 19.07.2016 01:01

0 плюса

767 Репутация автора

хорошее объяснение автовивификации здесь http://perlmaven.com/autovivification

Автор: Emil Perhinschi Размещён: 02.08.2016 03:58
Вопросы из категории :
32x32