undef($hash{"a"});
эквивалентно
$hash{"a"}=undef;
Итак, вы добавляете ключ 'a' со значением undef. Чтобы удалить значение из хэша, используйте «delete».
delete $hash{"a"};
Невозможно иметь разные размеры «ключей» и «значений» для одного и того же хэша. Вы можете использовать grep для фильтрации нежелательных элементов.