develooper Front page | perl.perl6.language | Postings from May 2005

Re: (1,(2,3),4)[2]

Thread Previous | Thread Next
Rod Adams
May 25, 2005 10:15
Re: (1,(2,3),4)[2]
Message ID:
TSa (Thomas SandlaƟ) wrote:

> You mean @a = [[1,2,3]]? Which is quite what you need for multi
> dimensional arrays anyway @m = [[1,2],[3,4]] and here you use
> of course @m[0][1] to pull out the 2. I'm not sure if this automatically
> makes the array multi-dimensional to the type system though. That is
> if @m[0,1] returns 2 as well or if it returns the list (1,2) or whatever.
> Is @m[0..3] valid and what does it return? And what's the type of that
> return value(s)? I can imagine many things ranging from a two element
> array of refs to two element arrays up to a flattened list of 4 values.

@m[0,1] is an array slice of two elements, in this case two arrayrefs 
[1,2], and [3,4].
@m[0;1] is a multidim deref, referencing the 4.

@m[0..3] is valid, returning arrayref x 2, undef x 2.

Personally, I strongly believe that assigning an arrayref to an array 
should dereference the arrayref, and send that to the array. Otherwise, 
you get silly things like:

    $a = [1,2,3];
    @a = $a;
    say +@a; # 1

I would prefer to not have people be forced to write that as "@a = $a[];".

I don't see the big problem with having to double up the brackets to 
assign an arrayref to an array element.

-- Rod Adams

Thread Previous | Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About