in reply to Re^4: Perl::Improved Volume 0, Number 0
in thread Perl::Improved Volume 0, Number 0

If indices start at 1, taking a slice till the end of an array can be written as:

The good solution for that imo would be to have the .. and ... operators as in ruby, that is, 3..8 means an inclusive range, but 3...8 means a range including 3 but not including 8.

Update: I say this because I've never seen any good example of using $#{} other than a range ending in it.

Replies are listed 'Best First'.
Re^6: Perl::Improved Volume 0, Number 0
by hardburn (Abbot) on Aug 30, 2004 at 19:13 UTC

    Better still, have .. do some magic when unary to go right to the end of the array being indexed:

    $a[ 5 .. ]; # Equivilent to $a[ 5 .. $#a ]

    Though I have no idea how hard that would be to add, or what compatibility issues come up.

    "There is no shame in being self-taught, only in not trying to learn in the first place." -- Atrus, Myst: The Book of D'ni.

      I may be mistaken (I have a hard time following all the developments and keeping the status quo straight), but to my knowledge, that's supposed to work Perl6.

      Makeshifts last the longest.

      That would be difficult, because 5..$#a is not always used in such a context (subscripting). It is used in other code like @data[sort { $data[$a]<=>$data[$b] } 0..$#data] where it would be difficult to derive the endpoint automatically.

      Btw I think perl6 will have infinite ranges, which is a good idea.

        Well, since the theoretical unary .. is already magical, you could just say that using it outside an array slice is a syntax error, just like it is now.

        Of course, you'll inevitably get newbies who ask why @a = 1 .. ; doesn't work, much how they see while(<FH>) now and expect <FH>; $s = $_ . 'foo'; to work.

        "There is no shame in being self-taught, only in not trying to learn in the first place." -- Atrus, Myst: The Book of D'ni.

        This construct: 0..$#data oughta be something like @#data  # all the indexes of @data, regardless of where your indexes start

        Caution: Contents may have been coded under pressure.