in reply to Undefined Subroutine & Global symbol requires explicit package name

From your question, I assume that you are a beginner in Perl. In this case, I recommend that you add use diagnostics; in addition to strict and warnings. It will give you more information about the messages.

%dns_check = ("address" => "ip");
You should always "declare" your variables, to tell Perl whether you want to have a lexically scoped or a globally scoped variables. For the time being (until you get more experience), I suggest you use only lexically scoped variables. You declare it using my:
my %dns_check = ("address" => "ip");
See my.

-- 
Ronald Fischer <ynnor@mm.st>