http://www.perlmonks.org?node_id=508481

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: