warn function
Print debugging info
Produces a message on STDERR just like die(), but doesn't exit
or throw an exception.
If LIST is empty and $@ already contains a value (typically from a previous
eval) that value is used after appending "\t...caught" to $@. This is useful
for staying almost, but not entirely similar to die().
If $@ is empty then the string "Warning: Something's wrong" is used.
No message is printed if there is a $SIG{__WARN__} handler installed. It is the handler's responsibility
to deal with the message as it sees fit (like, for instance, converting it into a die()).
Most handlers must therefore make arrangements to actually display the warnings that they are not prepared to deal
with, by calling warn() again in the handler. Note that this is quite
safe and will not produce an endless loop, since __WARN__ hooks are not called from inside one.
You will find this behavior is slightly different from that of $SIG{__DIE__} handlers (which don't
suppress the error text, but can instead call die() again to change it).
Using a __WARN__ handler provides a powerful way to silence all warnings (even the so-called mandatory
ones). An example:
# wipe out *all* compile-time warnings
BEGIN { $SIG{'__WARN__'} = sub { warn $_[0] if $DOWARN } }
my $foo = 10;
my $foo = 20; # no warning about duplicate my $foo,
# but hey, you asked for it!
# no compile-time or run-time warnings before here
$DOWARN = 1;
# run-time warnings enabled after here
warn "\$foo is alive and $foo!"; # does show up
See the perlvar manpage for details on setting %SIG entries, and
for more examples.
|