in reply to multipart key in hash, i'm confused
One way to do this is a hashref of hashrefs:
while (my $r = $attr_detail->fetchrow_hashref()) { $details->{$r->{'masterid'}}->{$r->{pco_attribute_id'}}->{pco_value} + = $r->{'pco_value'}; } # ... while (my ($master_id, $attr_ref) = each %details) { while (my ($attr_id, $pco_value) = each %$attr_ref) { print DETAILS "$master_id\t$attr_id\t$pco_value\n"; } }
Using a multipart key was much-used in Perl 4 and has largely fallen out of fashion since we've had the option of using references to make multi-dimensional hashes. I think it can still be a pretty good approach to some cases when you're guaranteed the keys won't have binary values (or, more specifially, won't contain $;). The downside is that you often need to go out of your way to split the key, as below:
for my $m_id_attr_id (keys %details) { my ($m_id, $attr_id) = split $;, $m_id_attr_id; print DETAILS "$m_id\t$attr_id\t$details{$m_id_attr_id}\n"; }
or, shorter:
print DETAILS (join "\t", split $;, $details{$_}), "\n" for keys %details;(Code untested.)
|
|---|