develooper Front page | perl.perl6.language.data | Postings from September 2000

Re: RFC 204 (v2) Arrays: Use list reference for multidimensional array access

Thread Previous | Thread Next
From:
Bart Lateur
Date:
September 25, 2000 14:53
Subject:
Re: RFC 204 (v2) Arrays: Use list reference for multidimensional array access
Message ID:
1nhvsssbvem0k4sum8vq38oph0d6a8v0ta@4ax.com
On Fri, 22 Sep 2000 08:58:10 +1100, Jeremy Howard wrote:

>Bart Lateur wrote:
>> Hmm... the problem is, I think, that array references and ordinary
>> scalars are both scalars.
>>
>That's true, but they're scalars with different interfaces. In particular,
>an array ref can be dereferenced and provides an array in doing so. If an
>index can do this, then it's a multidimensional index.

That worries me. I'd like to avoid to repeat the fiasco of having the
same code have different kinds of behavious, depending on the contents
of a variable, as we have with symbolic references versus anonymous
arrays/hashes.

What will this return?

	$ary[$index]

It looks like a plain and simple array item, but what if $index is an
array ref?


>> What would be the difference between
>>
>> $a[2]
>>
>> and
>>
>> $a[[2]]
>>
>> anyway? Aren't these just the same?
>>
>Nearly! From the RFC:
>
><quote>
>When a listref is used to index a list of lists, the returned list reference
>is automatically dereferenced:
>
>  my @array( [0,1], [1,2]);
>  my @a = @array[[0]]; # Returns (0,1), _not_ [0,1]
></quote>

Puh. I'd prefer

	my @a = @$array[0];

which is shorter anyway.   ;-)  Currently, this does the wrong thing,
and I think that maybe the prefix precedence should be fixed so that

	@$ary[0]

is the same as

	@{$ary[0]}

Or doe people find it intuitive that this returns a slice of an array
pointed to by $ary?


>> If so, why not grab back into the old box, and get the syntax for
>> "multidimensional hashes" in perl4?
>>
>> single dimension: $hash{$item}
>>
>> 2 dimensions: $hash{$item1, $item2}
>>
>> Note that because of the '$' prefix, this cannot be confused with a
>> narray slice:
>>
>> hash slice, not multidimensionanl hash: @hash {$item1, îtem2}
>>
>> So, the similar syntax for ordinary arrays would then be:
>>
>> $array[2, 3]
>>
>> not $array[[2, 2]]
>>
>> Please feel free to corrct me if I'm wrong.
>>
>The difficulty with this is that it's not clear how to specify a
>multidimensional slice. An index is either multidimensional, *or* a slice,
>but not *both*.

You are right in that. You cannot get a hash slice of a Perl4 style
"multidimensional" hash. A major stumbling block.

-- 
	Bart.

Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About