in reply to double hash, array, and hashed data structure

When accessing deep-nested data structures, take no chances with autovivification. Make use of Data::Diver

For example, fire up your Perl debugger:
$ perl -de ''
Then enter these lines:
undef $ref exists $ref->{intervened}->{notvivified} # should not exist x $ref
You'll see that $ref->{intervened} has been autovivified. Scary, isn't it? This also applies to dereferencing arrays.