I thought that you had to specify a starting value for $hoh{$c1}{$c2}{count}.
When you dereference or modify a non-existing array or hash element, it will automatically "spring to life", including all the necessary intermediate hashes/arrays. For example:
my %test; $test{a}[2]{b} = 'Hello'; # %test now contains: # ( a => [ undef, # undef, # { b => "Hello" } ] )
It's called autovivification, and it's one of the nice features that make Perl special... :) See Wikipedia and perlreftut for more info.
In addition, the ++ (auto-increment) operator silently treats undef as 0. So you don't need to specify an initial value.
what if I wanted to start that count at 5?
One solution would be to create the hash first, and then use another loop to add 5 to each counter.
Alternatively, you can do a check inside the loop (before incrementing!) to see if the counter has already been incremented previously, and if not, initialize it with the number 5:
if (!$hoh{$c1}{count}) { $hoh{$c1}{count} = 5; } # verbose form
$hoh{$c1}{count} ||= 5; # shortcut
(See C style Logical Or and Assignment Operators.)
In reply to Re^3: Count number of elements in HoH and sum them for other keys
by smls
in thread Count number of elements in HoH and sum them for other keys
by Sosi
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |