my %reasons; my ($key, $val, @holdval, $holdkey); while (($key, $val) = (each %{$switch_hash})){ @holdval = keys %{$$switch_hash{$key}}; for (values%{$val}){ while ( (my $tmpkey, my $tmpval) = each%{$_}){ my $newkey = $key.":".$tmpkey; my $newval =$tmpval; $tmpval =~ s/^\d+://; $reasons{$newkey} = $tmpval if ($tmpval ne ''); $newval =~ s/:.*$//; $$switch_hash{$key}{$holdval[0]}{$tmpkey} = $newval; } } }