#!/usr/bin/perl use strict; use warnings; my %host = ( 'ip1' => { 'tcp' => { '21' => { 'state' => 'open', 'service' => 'ftp', }, '80' => { 'state' => 'open', 'service' => 'web', } } }, 'ip2' => { 'tcp' => { '23' => { 'state' => 'open', 'service' => 'telnet', }, '80' => { 'state' => 'open', 'service' => 'web', } } } ); foreach my $key (keys %host) { print "$key\n"; foreach (keys %{ $host{$key}{tcp} } ) { printf " %s %s %s\n", $_, $host{$key}{tcp}{$_}{state}, $host{$key}{tcp}{$_}{service}; } }