Instead of just checking the truth or otherwise of $hash{d}{value}, check for existence using the exists() function. That way you won't get weird bugs when the value is (eg) zero or the empty string. You might also want to check that $hash{d} is a reference to a hash before trying to access it.