use warnings; use strict; use Carp; use Data::Dumper; local $SIG{__WARN__}=sub {(my $str=join(" ",@_))=~s/[\n\r]//g;die("\t@{[(caller(1))[3]]}() => $str\n")}; my $foo = { aa => { O => 'zz', C => 'yy' }, # bb => { O => 'xx', C => 'xx' }, }; sub mysort {return sort {$a cmp $b} @_} sub eg_{my$h=pop;grep{!(($h->{$_}{O}||$;)eq($h->{$_}{C}||$;))}%$h} print Data::Dumper->Dump([$foo],[qw(foo_before)]),"\n"; eval { print " Elusion golf: ".join (" ",mysort eg_($foo))."\n"; }; print $@ if $@; print Data::Dumper->Dump([$foo],[qw(foo_after)]),"\n"; __END__ $foo_before = { 'aa' => { 'O' => 'zz', 'C' => 'yy' }, 'bb' => { 'O' => 'xx', 'C' => 'xx' } }; Elusion golf: aa #### $foo_after = { 'HASH(0x1acf040)' => {}, 'aa' => { 'O' => 'zz', 'C' => 'yy' }, 'bb' => { 'O' => 'xx', 'C' => 'xx' }, 'HASH(0x1acef44)' => {} };