my $h= {AA => q(aa), BB => q(bb) };
undef($h->{AA});
delete($h->{BB});
print scalar(keys %$h),"\n";

とすると1が返って、 $h は { AA=> undef } というhashになるが、
これが仕様?
undef($h->{AA}) と delete($h->{AA}) は違うのか…