($x eq $y) #### ((defined($x) && defined($y) && ($x eq $y)) || (!defined($x) && !defined($y)) #### my $foo = { aa => { O => 'zz', C => 'yy' }, bb => { O => 'xx', C => 'xx' }, cc => { O => undef, C => 'ww' }, dd => { O => 'vv', C => undef }, ee => { O => undef, C => undef }, ff => { C => undef }, gg => { O => 0, C => 0 }, hh => { O => undef, C => 0 }, }; #### sub f { my ($h) = @_; grep { !exists($h->{$_}->{O}) || (defined($h->{$_}->{O})? (defined($h->{$_}->{C})? ($h->{$_}->{O} ne $h->{$_}->{C}) : 1) : defined($h->{$_}->{C})) } keys %$h }