Oh.
I understand that you were probably frustrated not know where on earth the word "concatnation" would come out of your code, but you didn't say that that was your problem. Wouldn't you agree it's really hard to tell what you were asking? ;)
Anyway, I think Ryszard got the answer correctly... basically, embedding variables in string implicitly invokes the concat op, so your line 40 is equivalent of:
print $host . " FAILEd to repond on " . $service . " " . $ports{ se
+rvice } . "\n";
So you see that if $port{ service } was undefined, you would get a concatnation warning. If you're interested, check out the output of perl -MO=Terse yourscript.pl |