warn - print debugging info

- NAME
- SYNOPSIS
- DESCRIPTION

# NAME

warn - print debugging info

# SYNOPSIS

warn LIST

# DESCRIPTION

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. See the Carp module for other kinds of warnings using its `carp()` and `cluck()` functions.

warn - print debugging info