Вы должны сделать это вручную. Вышеуказанные «ответы» не работают! Просто проверьте это:
use strict;
use warnings FATAL => 'uninitialized';
use Carp ();
$SIG{__DIE__} = \&Carp::confess;
my $x = undef; # it would be enough to say my $x;
if (!$x->{test}) {
print "no warnings, no errors\n";
}
Вы увидите, что разыменование не вызвало никаких сообщений об ошибках или предупреждений. Я не знаю способа заставить Perl автоматически обнаруживать использование undef в качестве недействительной ссылки. Я подозреваю, что это так задумано, так что автовификация работает без проблем.