One of my program went dead after I copied it from one directory to another, I traced the problem, and it came up related to the use of -1 as the index for an empty array. (The program does a glob that creates a non-empty array in the orginal home directory, but not the new place, and the array is then passed to a function call.)
I am sort of fine with the error message, in a way, one can argue that it does not make sense to access the last element of an empty collection. (However it seems to me, undef makes more sense, agrees with the rest of Perl better, and allows more flexibility.)
But I don't like the inconsistency it carries. If you try this code:
my @a = (); print $a[-1]; foo($a[-1]); sub foo { }
It prints:
Use of uninitialized value in print at a.pl line 2. Modification of non-creatable array value attempted, subscript -1 at a +.pl line 3 .
Two issues:
- It does make sense to me to consider $a[-1] as undef, as what happened to line 2. But it looks like this perception is not followed all the way;
- Both foo and print are functions, regardless how different they might be underneath, I would expect them to take $a[-1] in the same way.
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Modification of non-creatable array value attempted
by sauoq (Abbot) on Nov 15, 2005 at 09:51 UTC | |
Re: Modification of non-creatable array value attempted
by Aristotle (Chancellor) on Nov 15, 2005 at 05:43 UTC |
Back to
Meditations