The warning is misleading or at least, confusing. It doesn't mean variables are un-initialised - it means that values are
undefined.
And while each un-initialized variable contains an undefined value, the reverse isn't true.
my $foo = undef; # Variable is initialized.
print $foo;
__END__
Use of uninitialized value in print
Your request is also unfeasable. Sure, it theory Perl could check that whenever you use
my it's on the LHS of an assignment. Beside that it would flag code that has run without warnings for many years, it also won't do you any good. For instance, while:
my @foo = qw /bar baz quux/;
initialized
$foo[0], $foo[1] and
$foo[2], it still means that
$foo[3], $foo[4], $foo[5], ..., etc are uninitialized.