If an undef in a variable would led you to deleting every row in a database table, it might be better for the uninitialized warning to be fatal.
This is why you put in thorough sanity checks before doing something so destructive:
if (defined $thing) {
destroy_database($thing);
} else {
do_something_else();
}
undef has well-defined semantics in Perl (empty or zero), which are very useful in most cases. You should know when your code may do something catastrophic, and be very careful then, but that's no reason to be paranoid everywhere.