Well this whole array vs list thing is filled with controversy. Tom
Christiansen says things like @xyz is an array variable that defines a
list, your faq reference not withstanding. I mean look at Tom's writings
on the subject like this one:
http://www.perl.com/doc/manual/html/pod/perllol.html. Or some of his
books.
I personally think this gets into what I would call "language lawyering"
and fine parsing of the terminology and to no real benefit. I personally
like the way Tom does it by introducing the term array and then quickly
moving to calling all of these Perl equivalent things to "arrays in other
langugages", lists. That a list is described by an array variable type,
is not that an important distinction to me.
When we get into more complex Perl structures like LoL (List of Lists),
LoH (Lists of Hash), LoLoL (List of Lists of Lists), my opinion is that
these are MUCH more descriptive than other types of terms. I guess part
of this has to do with what somebody's programming background is.
In the
C world, a "traditional 2- D" or higher order C array is a pretty
worthless data structure for most jobs. There are lots of problems with
this, just one thing is that you have to pass around both dimensions
which makes it very hard to write general purpose matrix
routines. Also for example, I don't know of any traditional 2-D arrays
used in the Unix O/S. Maybe there are some, I just don't know where they
are.
Starting with intermediate C, "traditional" 2-D C arrays go the way of
the dodo bird. The way in C to build a practical 2D structure, say of
ints is an **int (array of pointers to arrays of ints). This is very
close to exactly what a Perl LoL is! In C, this is also a 2-D array, but
it is a special kind of 2D array. In Perl, calling this a LoL, List
of List (or more specifically List of references to Lists) is much more
descriptive of what is really going on! A main point with a LoL is that
everything is a pointer until you get to the final
dimension. A "traditional" array has fixed memory layout and dimensions.
That is not what a Perl list is!
Any Perl list that has a name can be "grown". Even ones that are initialized
with X number of elemements at the beginning of the program.
I'm sure this post will generate some controversy. Maybe sometimes we get
too caught up in yelling about terminology? I like the terms LoL, etc. If somebody
wants to call this AoA, I'm not that bent out of shape about it. I think LoL is
better, but this is not the "end of the world".
|