in reply to Syntax allowed in interpolated hash/array indexes

You've just picked the wrong pair of delimeters. If you use (eg) [...] it's ok:
qq[ $h->{ fn("{") =~ /c/ } ]

qq will quote the first pair of matching delimeters. Which, in your case will be qq< $h->. Obviously, not what you want.