in reply to Re: literal lists
in thread literal lists

true. In that case I wonder why $#b evaluates to -1, rather than undef?

Replies are listed 'Best First'.
Re^3: literal lists
by gellyfish (Monsignor) on Sep 06, 2005 at 12:10 UTC

    I guess because undef in an integer context will be taken as '0' (albeit with a warning if you have asked for warnings), whereas -1 is not a valid array index:

    @b = (a .. z); + $#b = undef; + print "@b"; + $#b = -1; + print "@b";

    /J\

      That makes some sense. -1 is a valid index though, in normal use - it gives you the last element. But in the code you gave, the -1 indeed makes @b an empty array (I didn't know you could do that). Kind of like a quick way to truncate arrays.