in reply to Returning multiple Hash references from a sub()

You are returning a list (of hashrefs) from the sub. You're assigning the list to a hash (the other hashes will be empty). You need to do it in multiple steps:
my @out = ParseForExpDB2Param(@params); my %ExpValHash4 = %{$out[0]}; my %ExpValHash5 = %{$out[1]}; my %ExpValHash6 = %{$out[2]};
Or just work with hashrefs:
my ($ExpValHash4, $ExpValHash5, $ExpValHash6) = ParseForExpDB2Param(@p +arams);