# Fwd: Multi-Dimensional arrays

```---------- Forwarded message ----------
From: Carl Mäsak <cma...@gmail.com>
Date: Sun, Apr 5, 2009 at 9:30 AM
Subject: Re: Multi-Dimensional arrays
To: Peter Schwenn <pe...@schwenn.com>```
```

Peter (>):
> I've had inconsistent/incorrect results, once having created an array
> of array of arrays, both while addressing elements in it as
> @A[l][m][n]=x and as @a[l][...@y ; .... as severe, for example, as
> modifying @A[16]'s contents in addressing @A[14] .

Aye; that may or may not be a bug. I've previously fallen into this trap:

\$ perl6 -e 'my @a = [[0 xx 3] xx 3] xx 3; @a[1][2][0] = 7; say @a.perl'
[[[7, 0, 0], [7, 0, 0], [7, 0, 0]], [[7, 0, 0], [7, 0, 0], [7, 0, 0]],
[[7, 0, 0], [7, 0, 0], [7, 0, 0]]]

But that (if I understand correctly) is how C<xx> is specced to
behave. It doesn't create clones of the Array, it gives you several
references to the same one.

What does work, and what I settled on in Druid (which pretty much
depends on multidimensional arrays working properly), is using map:

\$ perl6 -e 'my @a = map {[map {[map { 0 }, ^3]}, ^3]},  ^3;
@a[1][2][0] = 7; say @a.perl'
[[[0, 0, 0], [0, 0, 0], [0, 0, 0]], [[0, 0, 0], [0, 0, 0], [7, 0, 0]],
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]]

> Perhaps I should wait.  Or perhaps what you're saying includes a
> prohibition against using any references to @A which have two or more
> "[..]"  .  The reason I thought I could use [][] and [][][] is because
> I had no problem using @B[]{} where I had an array of hashes.

I'm not 100% sure, but I would bet that your problems stem from a
distinction such as the one above.

> Another thing I could do is to learn how to search RT to see better
> what works and what doesn't.

Yes, please do that! Not for this particular reason, but simply
because we need more people with knowledge about the tickets in RT.
Lately, they have grown unnecessarily, simply because we have too few
eyes finding closeables and duplicates.

// Carl
```