> -----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