in reply to undef-safe equality

Is there some value like "" that you want a NULL to be considered equal to? If so,
if ( ($ret->{val1}||"") eq ($this->{val1}||"") ) ...
Otherwise,
if ( defined($ret->{val1}) == defined($this->{val1}) && ($ret->{val1}||"") eq ($this->{val1}||"") ) ...