in reply to Difference between exists and defined
I am expecting after the assignment in the second line, the array should consists of four elements #0-3Why would you expect that? $array[3] is the only element you've assigned a value to, or even mentioned, prior to the loop, so there's no reason for Perl to have allocated storage space for any other elements.
What you have missed is that Perl arrays are sparse data structures, so that you can designed to allow you to assign to $array[8675309] without consuming an unreasonable amount of memory to store the 8675309 unused elements which precede it. They are explicitly not C-style indexes into a region of contiguous memory.
(Also, as previous replies have mentioned, the docs warn against using exists on arrays, so this behavior should be considered implementation-dependent and other versions of the perl binary may potentially behave differently. I kind of doubt that they actually would behave differently in this case, but you still shouldn't rely on it in any code that you care about.)
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: Difference between exists and defined (updated)
by AnomalousMonk (Archbishop) on Apr 17, 2019 at 21:31 UTC | |
by LanX (Saint) on Apr 17, 2019 at 23:35 UTC | |
by haukex (Archbishop) on Apr 18, 2019 at 07:23 UTC | |
by dsheroh (Monsignor) on Apr 18, 2019 at 08:06 UTC |
In Section
Seekers of Perl Wisdom