in reply to lost in my data structure.

One way is:
for my $ip (keys %host) {
  print "$ip\n";
  for my $port (keys %{$host{$ip}{'tcp'}}) {
    print $port,"  ";
    print $host{$ip}{'tcp'}{$port}{'state'},"  ";
    print $host{$ip}{'tcp'}{$port}{'service'},"\n";
  }
}

As for adding another line, you could do this:

%host {
   
  'ip1' => {
     'tcp' => {
        '21' => {
           'state' => 'open',
           'service' => 'ftp',
        },
        '80' => {
           'state' => 'open',
           'service' => 'web',
        },
        '53' => {
           'state' => 'open',
           'service' => 'web',
         },
      },
    },
  },
...

Be very careful with your punctuation. Hash elements are separated by commas not semicolons and string values must be in quotes.