#!/usr/bin/perl -CSDA use utf8; use strict; use warnings; no warnings qw{uninitialized numeric}; no autovivification; # qw{fetch exists delete store}; use Data::Dumper; print "\n\ninitialize data structures, no autovivification\n"; my $n = { a => [1, 2 ], b => [3, 4], }; $$n{'x'}{'y'}{'z'} and die; $$n{'x'}{'y'}[0] and die; $$n{'x'}{'y'} and die; $$n{'x'} and die; print "so far, so good, no 'x' autovivified:\n"; print Dumper $n; # "Can't use an undefined value as an ARRAY reference": # @{$$n{'x'}} and die; print "\n\nnow the same but in loop:\n"; for my $e (@{$$n{'x'}}) { } print "why 'x' autovivified?\n"; print Dumper $n; print "\n\nnow the same but in loop:\n"; for my $e (@{[ $$n{'y'} ]}) { } print "why 'y' NOT autovivified?\n"; print Dumper $n; 1; #### initialize data structures, no autovivification so far, so good, no 'x' autovivified: $VAR1 = { 'a' => [ 1, 2 ], 'b' => [ 3, 4 ] }; now the same but in loop: why 'x' autovivified? $VAR1 = { 'x' => [], 'a' => [ 1, 2 ], 'b' => [ 3, 4 ] }; now the same but in loop: why 'y' NOT autovivified? $VAR1 = { 'x' => [], 'a' => [ 1, 2 ], 'b' => [ 3, 4 ] };