in reply to Scope and references

Also, I still don't understand why the 'wrong' version creates the data structure that it does. Any thoughts on that one?
use strict; use warnings; use 5.010; use Data::Dumper; my @arr = (); $arr[3] = 40; say Dumper(\@arr); --output:-- $VAR1 = [ undef, undef, undef, 40 ];

And from the Data::Dumper docs:

... duplicate references to substructures within $VARn will be appropriately labeled using arrow notation.

The second element of your $VAR1 array is a duplicate reference, and instead of bothering to print it out again, Data::Dumper essentially says, "If you want to see what the second element looks like, go look at the first element, $VAR1->[0], because I won't be bothered trying to format that pretty output again.

Replies are listed 'Best First'.
Re^2: Scope and references
by ikegami (Patriarch) on Jun 20, 2011 at 03:48 UTC
    It's not a question of not being bothered. It's doing it the way to indicate both references refer to the same variable.
      Touche! In other words, if Dumper just displayed the same thing for the second element as the first element, you wouldn't know whether they were the same array or whether they were different arrays with identical content. ++
Re^2: Scope and references
by {}think (Sexton) on Jun 20, 2011 at 00:03 UTC
    Thanks to all of you for the GREAT explanations. I have learned much!
    {}think; #Think outside of the brackets