in reply to Count values in a hash

Your line
my ($key, @val) = split /\t/, $line, 2;
is erroneous; it is creating an array with one string value containing all of $line after the first tab.

Be well,
rir