foreach my $k ( keys %{HoH} ) { unless ( $HoH{$k} and values %{$HoH{$k}} ) { delete $HoH{$k}; } } #### my %HoHCopy; foreach my $k ( keys %HoH ) { if ( $HoH{$k} and values %{$HoH{$k}} ) { $HoHCopy{$k} = $HoH{$k}; } } #### my %HoHCopy = map { $_ => $HoH{$k} } grep { $HoH{$_} and values %{$HoH{$_}} } ( keys %HoH ); # or my %HoHCopy = map { ($HoH{$_} and values %{$HoH{$_}}) ? ($_ => $HoH{$k}) : () } ( keys %HoH );