Perl5 リファレンス

       warn LIST
               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

               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.