On Tue, May 15, 2012 at 05:15:56AM -0500, Peter da Silva wrote:
> On 2012-05-14, at 07:51, David Cantrell wrote:
> > For extra excitement, perl has this nifty feature where you can index
> > from the end of an array using negative numbers:
> > @array = ('ant', 'bat', 'camel', 'dolphin');
> > print $array[-1]; # dolphin
> > print $array[-2]; # camel
> That really _is_ a nifty feature, it makes all kinds of code so much simpler
> when origin is zero.
Indeed. It seems like such a little thing, but even in a language where
you know how long your arrays are like you do in perl, $array[-3] for
"the third element from the end" is so much easier to read than
$array[$#array - 2] ($#array is the index of the last element in the
array).
> But it interacts oddly with ANY origin changes. What happens to it when
> origin is 1? Does it mean array[0] is the last element?
It gets far more exciting than that!
array: [ant, bat, camel, dolphin]
origin: 0 index: 0 ant
origin: 0 index: 1 bat
origin: 0 index: -2 camel
origin: 0 index: -1 dolphin
origin: 1 index: 0 ant
origin: 1 index: 1 ant
origin: 1 index: -2 camel
origin: 1 index: -1 dolphin
origin: -1 index: 0 ant
origin: -1 index: 1 camel
origin: -1 index: -2 camel
origin: -1 index: -1 dolphin
origin: -2 index: 0 ant
origin: -2 index: 1 dolphin
origin: -2 index: -2 camel
origin: -2 index: -1 dolphin
which is All Kinds Of Fucked Up.
I believe that most of what's happening there is accidental. $[ was
invented for the use of the a2p awk-to-perl translator, awk using 1 as
its array origin and perl using 0 by default, and it was never intended
to be set to anything other than 0 or 1. Provided that you set $[
to 0 or 1 (or any other positive number) and provided that you never try
accessing any index less than $[, it behaves as you would expect.
--
David Cantrell | Hero of the Information Age
I think the most difficult moment that anyone could face is seeing
their domestic servants, whether maid or drivers, run away
-- Abdul Rahman Al-Sheikh, writing on 25 Jan 2004 at
http://archive.arabnews.com/?article=38558