Fatalize defined(@) and defined{%)

Calling defined on an array or hash has been deprecated and scheduled
for removal in v5.22.  This commit does that, removing the tests that
assumed they were defined.

In order to get the line numbers of the errors to display, I combined
the first and second lines of the message, omitting the \n