Ваш анализ структуры корректен, однако соответствующий пример автовивификации будет выглядеть примерно так:
#!/usr/bin/env perl
use strict;
use warnings;
use 5.10.0; # say
my @array;
# check all levels are undef in structure
say defined $array[0] ? 'yes' : 'no'; # no
say defined $array[0]{foo} ? 'yes' : 'no'; # no
say defined $array[0]{foo}[0] ? 'yes' : 'no'; # no
# then check again
say defined $array[0] ? 'yes' : 'no'; # yes (!)
say defined $array[0]{foo} ? 'yes' : 'no'; # yes (!)
say defined $array[0]{foo}[0] ? 'yes' : 'no'; # no
Обратите внимание, что вы ничего не присвоили, на самом деле все, что вы сделали, это проверили,что-то существуетАвтовивификация происходит, когда вы проверяете многоуровневую структуру данных на некотором уровне x
, а затем внезапно все уровни ниже (x-1 ... 0
) внезапно появляются.
Это означает, что
say defined $array[0]{foo}[0] ? 'yes' : 'no';
эффективноэквивалентно
$array[0] = {};
$array[0]{foo} = [];
say defined $array[0]{foo}[0] ? 'yes' : 'no';