in reply to Using a hash to store complex data

%hash only has one key (how useless!), so

@HoH{keys %hash} = values %hash
is the same as
$HoH{$unit_num} = $hash{$unit_num};

As you can clearly see now, you completely replace all existing data for $unit_num every time you find a new record for $unit_num.

Change

%hash = ( $unit_num => { $event_nm => [ $event_date ], }, ); @HoH{keys %hash} = values %hash
to
push @{ $HoH{$unit_num}{$event_nm} }, $event_date
Thanks to autovivification, the above is short for
$HoH{$unit_num} ||= {}; $HoH{$unit_num}{$event_nm} ||= []; push @{ $HoH{$unit_num}{$event_nm} }, $event_date;

Tip: Don't pass hashes and arrays to Dumper. Pass references to them:

print Dumper( \%HoH );