Produces a message on STDERR just likedie
, 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 todie
.
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 adie
). Most handlers must therefore make arrangements to actually display the warnings that they are not prepared to deal with, by callingwarn
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 calldie
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 warningsBEGIN { $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 herewarn "\$foo is alive and $foo!"; # does show up
Seeperlvar for details on setting%SIG
entries, and for more examples. See the Carp module for other kinds of warnings using its carp() and cluck() functions.
Perldoc Browser is maintained by Dan Book (DBOOK). Please contact him via theGitHub issue tracker oremail regarding any issues with the site itself, search, or rendering of documentation.
The Perl documentation is maintained by the Perl 5 Porters in the development of Perl. Please contact them via thePerl issue tracker, themailing list, orIRC to report any issues with the contents or format of the documentation.