Richard Lee wrote:
>
Gunnar Hjalmarsson wrote:
C:\home>type test.pl
use Data::Dumper;
my %HoA = (
something => [ qw/val1 val2 val3 and so forth/ ],
something2 => [ qw/vala valb valc and so forth/ ],
something3 => [ qw/valZ valZ1 valZ2 so forth/ ],
);
my %HoH;
while ( <DATA> ) {
/^(\S+)/;
@{ $HoH{$1} }{ @{ $HoA{$1} } } = split;
}
print Dumper \%HoH;
__DATA__
something3 one two three etc
something2 two three and so on
something one two three four five
C:\home>perl test.pl
$VAR1 = {
'something3' => {
'so' => 'three',
'valZ2' => 'two',
'forth' => 'etc',
'valZ1' => 'one',
'valZ' => 'something3'
},
'something2' => {
'so' => 'so',
'valb' => 'two',
'forth' => 'on',
'valc' => 'three',
'vala' => 'something2',
'and' => 'and'
},
'something' => {
'so' => 'four',
'forth' => 'five',
'val2' => 'one',
'val1' => 'something',
'val3' => 'two',
'and' => 'three'
}
};
C:\home>
Hey, this works perfectly, thanks.
I just need to understand more on this
@{ $HoH{$1} }{ @{ $HoA{$1} } } = split;
This is really spinning my heads in all direction trying to see if I can
truly understand them instead of just using it.
Yes, it's not the most transparent line of code is it. The while loop is
equivalent to:
while ( <DATA> ) {
my @values = split;
my $key = $values[0];
my $labels = $HoA{$key};
my %map;
@[EMAIL PROTECTED] = @values;
$HoH{$key} = \%map;
}
And IMO it's better written like that. Does that help?
Rob
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/