Manual

- Overview
- Tutorials
- FAQs
- History / Changes
- License

Reference

- Language
- Functions
- Operators
- Special Variables
- Pragmas
- Utilities
- Internals
- Platform Specific

Modules

- A • B • C • D • E
- F • G • H • I • L
- M • N • O • P • S
- T • U • X

News / Blogs

- Perl Buzz
- Perl Iron Man
- Perlsphere
- Planet Perl
- TPF news
- Use Perl

See also

- CPAN
- Perl.org
- Perl.com
- Perl 5 Wiki
- Perl Jobs
- Perl Mongers
- Perl Monks

Contact

- Site designed and maintained by Jon Allen (JJ)
- http://perl.jonallen.info

- View the project page and FAQs

# warn

Perl 5 version 10.1 documentation
Go to top

# warn

Perl functions A-Z | Perl functions by category | The 'perlfunc' manpage

- warn LIST

  Prints the value of LIST to STDERR. If the last element of LIST does not end in a newline, it appends the same file/line number text as `die` does.

  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 perlvar 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.

Recently read

Tools

- Preferences