> -----Original Message-----
> From: Luke Palmer [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, March 29, 2005 5:43 AM
> To: Zhuang Li
> Cc: Jeff Yoak; fwp@perl.org; perl6-language@perl.org
> Subject: Re: Unknown level of hash
> 
> Zhuang Li writes:
> > Yes. I think it's both useful and fun. I was thinking something
similar
> > to
> > @[EMAIL PROTECTED] = map{1} @a;
> >
> > But getting "$hash->{E1}->{E2}->...->{En} = 1;" instead of
"$hash{E1} =
> > 1; ... $hash{En} =1;".
> 
> Yeah, like this:
> 
>     %hash{dims @a} = (1) xx Inf;
> 
> > What I'd really like to do is:
> >
> > Given @a = ('E1', 'E2', ..., 'En');
> >     @b = ('K1', 'K2', ..., 'Km');
> >     @c = ('V1', 'V2', ..., 'Vm');
> >
> > To get the following in one line:
> > $hash->{E1}->...->{En}->{K1} = 'V1';
> > $hash->{E1}->...->{En}->{K2} = 'V2';
> > ....
> > $hash->{E1}->...->{En}->{Km} = 'Vm';
> 
>     %hash{dims @[EMAIL PROTECTED] = @c;


That's exactly the type of thing I expected to have.


> 
> Were you asking the right thing?
> 
> Luke


My real world problem is:

Given:
$a = [
                ['E11', 'E12', ..., 'E1n'],
                ...
                ['Em1', 'Em2', ..., 'Emn'],
        ];

And an array @b which contains indexes for each row in $a, for example:

@b = (2, 0, 3);   # length of the array could change. Consider this to
be the key fields to table $a


To get:

# for the first row:
$hash->{E13}->{E11}->{E14}->{E11} = 'E11';
...     # for each element in first row
$hash->{E13}->{E11}->{E14}->{E1n} = 'E1n';   # for the last element in
row1

...   # similar thing for each row

# for the last row:
$hash->{Em3}->{Em1}->{Em4}->{Em1} = 'Em1';
...
$hash->{Em3}->{Em1}->{Em4}->{Emn} = 'Emn';


john

Reply via email to