別にグローバルならrefをreturnしてもいいけど、こうじゃないの?
my %HoA;
&XXX(\%HoA);
print @{$HoA{'key_name'}};
exit;

sub XXX {
my $refHoA = $_[0];
push @{$$refHoA{'key_name'}}, "value1", "value2";
return(0);
}