Yes, !defined is probably a better CONDITON for the original data... I was merely refactoring the given map code. However, since you probably want the empty string to be defaulted as well, I'd probably use something like:
$_ = ' ' for grep {!defined or $_ eq ''} @arr;