package T;
use strict;
my $oldwarn;
sub import
{
$oldwarn = $SIG{__WARN__};
$SIG{__WARN__} = \&callstack;
}
sub callstack
{
&$oldwarn if $oldwarn;
require Carp;
Carp::confess(@_);
}
1;
####
#! perl -w
use strict;
use diagnostics;
use T;
sub foo
{
my $x;
print $x;
}
foo();
print "\n\ndone.\n\n";
####
$ perl a.pl
Use of uninitialized value in print at a.pl line 11 (#1)
(W uninitialized) An undefined value was used as if it were already
defined. It was interpreted as a "" or a 0, but maybe it was a mistake.
To suppress this warning assign a defined value to your variables.
To help you figure out what was undefined, perl tells you what operation
you used the undefined value in. Note, however, that perl optimizes your
program and the operation displayed in the warning may not necessarily
appear literally in your program. For example, "that $foo" is
usually optimized into "that " . $foo, and the warning will refer to
the concatenation (.) operator, even though there is no . in your
program.
Use of uninitialized value in print at a.pl line 11.
at T.pm line 16
T::callstack('Use of uninitialized value in print at a.pl line 11.\x{a}') called at a.pl line 11
main::foo() called at a.pl line 14 (#1)
done.
####
$ perl a.pl
Use of uninitialized value in print at a.pl line 11 (#1)
(W uninitialized) An undefined value was used as if it were already
defined. It was interpreted as a "" or a 0, but maybe it was a mistake.
To suppress this warning assign a defined value to your variables.
To help you figure out what was undefined, perl tells you what operation
you used the undefined value in. Note, however, that perl optimizes your
program and the operation displayed in the warning may not necessarily
appear literally in your program. For example, "that $foo" is
usually optimized into "that " . $foo, and the warning will refer to
the concatenation (.) operator, even though there is no . in your
program.
Use of uninitialized value in print at a.pl line 11.
at T.pm line 16
T::callstack('Use of uninitialized value in print at a.pl line 11.\x{a}') called at a.pl line 11
main::foo() called at a.pl line 14 (#1)
Uncaught exception from user code:
Use of uninitialized value in print at a.pl line 11.
at T.pm line 16
T::callstack('Use of uninitialized value in print at a.pl line 11.\x{a}') called at a.pl line 11
main::foo() called at a.pl line 14
at T.pm line 16
T::callstack('Use of uninitialized value in print at a.pl line 11.\x{a}') called at a.pl line 11
main::foo() called at a.pl line 14