in reply to Initializing a hash using a foreach loop

You are overwriting %ServerStatus in each iteration of your loop. Instead of your assignment, try:

$ServerStatus{ $Ip[$i] } = [ $Names[$i], "unknown" ];

You can also use map and one assignment instead of foreach:

%ServerStatus = map { $Ip[$i] => [ $Names[$i],   "unknown"] } 0 .. $#Ip;