%myhash = @_; #this is where the problem is!! foreach $key (keys %myhash) { %subhash = %{$myhash{$key}}; foreach $subkeys (keys %subhash){ $subkey_val = $subhash{$subkeys}; #print "$subkeys and $subkey_val\n"; if ($subkeys eq "competitor_firm" && $subkey_val eq ""){ delete $competitors_only{$key}; } } }