haukex has asked for the wisdom of the Perl Monks concerning the following question:
This is a two-part question. First, as a followup to the explanations in Array dereference in foreach(), where the whole point was that autovivification happens in lvalue context, does it seem counterintuitive to anyone else that the last of the following doesn't throw an error, especially when compared to the second-to-last example? (inspired by this thread from today)
$ perl -wMstrict -MData::Dump -e' @{$a->{list}} =(); dd $a' { list => [] } $ perl -wMstrict -MData::Dump -e' for (@{$a->{list}}) {}; dd $a' { list => [] } $ perl -wMstrict -MData::Dump -e' my @x = @{$a->{list}}; dd $a' Can't use an undefined value as an ARRAY reference at -e line 1. $ perl -wMstrict -MData::Dump -e' my $x = @{$a->{list}}; dd $a' Can't use an undefined value as an ARRAY reference at -e line 1. $ perl -wMstrict -MData::Dump -e' my $x = $#{$a->{list}}; dd $a' { list => [] }
Second, it has bothered me that there doesn't appear to be a central reference on autovivification. The perldocs only mention it in one or two sentences, mostly perlref, but there isn't a section heading anywhere, explaining it overall, that I can link to. There also doesn't appear to be anything in Tutorials either, all I could find so far is the SoPW Explaining Autovivication plus one or two other threads, but no central place where it is all explained. Unless I have missed something - does anyone happen to know?
Update: Thanks for the replies everyone!
Update 2: There are a couple more interesting cases having to do with autovivification and changes to scalar in Why doesn't this die with "Can't use an undefined value as an ARRAY reference"?".
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Autovivification Oddity
by shmem (Chancellor) on Feb 11, 2018 at 13:27 UTC | |
Re: Autovivification Oddity
by oiskuu (Hermit) on Feb 11, 2018 at 15:07 UTC | |
Re: Autovivification Oddity
by QM (Parson) on Feb 12, 2018 at 12:00 UTC |