Re. your map solution, I think it might be safer to test for the existence of a key in case the value is 0 or the empty string. Also grep could come into play.
print
map { qq{$_ matches. It's values are $csahash{$_} and $cathhash{$_
+}\n} }
grep { exists $cathhash{$_} }
keys %csahash;