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


in reply to why the array index has to start at 0??

Some languages, such as Pascal, do start with an index of '1' although for whatever reason they are in the minority. “It's just one of those things.”

In my experience, though, “arrays” are not that common. Usually you see people using either hash-tables or lists. Perl's “array,” of course, really is (in practical effect...I do not wish to slice words here...) a list.

Replies are listed 'Best First'.
Re^2: why the array index has to start at 0??
by Marshall (Canon) on Jun 23, 2009 at 20:47 UTC
    A Perl n-D structure is not an "array", certainly not for n>1. To me an array has a fixed, regular memory layout, like a checker or chess board. If I am on row 4, square 6 and I want to know what row 3, square 5 contains, I just go: left 1 and up 1 from where I am at. That's it!

    A Perl LoL (List of List), a Perl 2-D structure, doesn't work that way. I've written FORTRAN code with 2-D arrays and some ASM code, but never any C code yet and certainly not any Perl code. It is simply not the way that it is done.

    In Perl, every dimension until the last one is a "reference". It works the same as 'C'. If you take a 'C' class, somewhere along the path to the first year, you will learn that this: int x [8][8]; is total BS! There is a HUGE flaw with this because you cannot pass "x" to a subroutine! How big is it? What do I do? The answer to this is similar to how Perl does it. The first dimension is a list of pointers to the 2nd dimension. In the case of a 2-D array, you have to allocate memory for the list of pointers to lists and also for the "rows" themselves and it's a pretty huge hassle!

    Anyway what you wind up with is a "list" of pointers to "lists". Now I can give you "x" and tell you to add say 5 to every element in this structure. I don't have to tell you how many rows there are, I don't have to tell you how many columns there are (and they may even vary between rows).

    Perl automates a lot of this "grunt work". A Perl 2-D structure is not an array. It is a list of lists.