in reply to Re^2: pointer memory and dynamic memory
in thread pointer memory and dynamic memory

It's a fine distinction, but

$p = \$ary[ 2 ];

is a reference to the scalar that is currently assigned to the third element of the array, not a reference to the third element of the array. If you assign through the reference, the array elements value will change, but only because the scalar that is the current value has changed.

Too subtle? The clincher is that having taken the reference $p above, if you assign a value to

$ary[ 2 ] = 'anything';

the value referenced by $p doesn't change! The value of $ary[ 2 ] does.

Hence, when you take a reference to an array element, you are taking a reference to the scalar that is that array element's current value.

References from hash elements are the same, they point to the scalar that is the current value of that element. For a reference to point to the hash element itself, it would need (somehow) to reference both the key and the value, and continue to point to the current value of the element after the value of the element has been reassigned--not continue to point to the old value as currently.


Examine what is said, not who speaks.
"Efficiency is intelligent laziness." -David Dunham
"Think for yourself!" - Abigail
"Memory, processor, disk in that order on the hardware side. Algorithm, algorithm, algorithm on the code side." - tachyon