my %components = ( COMP1 => { eth1 => "10.172.9.21/24", eth1_gw => "10.172.1.1", eth2 => "10.172.10.21/24", }, COMP2 => { eth1 => "10.172.9.22/24", eth2 => "10.172.11.21/24", }, COMP3 => { eth1 => "10.172.11.21/24", eth2 => "10.172.13.21/24", eth3 => "10.173.2.98/24", }, ); #### foreach my $compName (keys %components) { foreach my $param (keys %{$components{$compName}}) { if ($param =~ /eth[0-9]$/) { # [ then loop again through the COMP keys, excluding the current key # ... does not seem nice ] } }