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

it seems to me that having indicies starting at 0 makes programming much easier, because this concept removes many playings with adding/substracting 1 when calculating them.

Imagine you do two-dimension array simulation
With 1-based arrays you'll need to do something like this:

$a[3*($i-1)+$j-1]
and this is equivalent to
$a[3*$i-2+$j]
which is dumb

Replies are listed 'Best First'.
Re^4: Perl::Improved Volume 0, Number 0
by Courage (Parson) on Aug 27, 2004 at 07:34 UTC
    Wow, I made SO many errors in code examples,
    but those prove my point.
Re^4: Perl::Improved Volume 0, Number 0
by Anonymous Monk on Aug 30, 2004 at 09:34 UTC
    Well, that would be:
    $a [$J * ($i - 1) + $j]
    as opposed to
    $a [($J + 1) * $i + $j]
    where $J is the highest second dimensional index. (Which if indices start with 1 happens to be identical to the number of indices).

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

    $a [5 .. @a]
    instead of having to write
    $a [5 .. @a - 1]
    or to have to use the $#array form:
    $a [5 .. $#a]
      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.

        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.