warn

Синтаксис

warn LIST

Описание

Выводит сообщение в STDERR аналогично функции die, но в отличие от последней не завершает выполнение программы и не генерирует исключений.
Сообщение не печатается, если установлен обработчик сигнала {__WARN__}. В этом случае генерация и форматирование сообщения возлагаются на обработчик, который может, в частности, содержать вызов die. Впрочем, большая часть обработчиков ограничивается только форматированием предупреждений, а если они не укладываются в заранее определенный формат, то обработчик снова вызывает warn. При этом никакой бесконечный цикл не образуется, поскольку обработчик не является реентерабельным.
Понятно, что такое поведение несколько отличается от логики работы обработчиков $SIG{__DIE__}, которые сами не подавляют вывод сообщения функции die, а вместо этого вызывают die, аргументом которой является модифицированный текст сообщения, еще раз.
Использование обработчика __WARN__ позволяет реализовать простой механизм подавления всех предупреждений, которые приводят к аварийному завершению CGI-программ. Например:
# Вырезание всех сообщений  этапа  компиляции
BEGIN { $SIG{'__WARN__'} = sub { warn $_[0] if $DOWARN } }
my $foo = 10;
my $foo = 20; # никаких  предупреждений о 
              # дублировании my  $foo,
              # никаких предупреждений до этой строки
$DOWARN = 1;
              # а вот теперь можно выдавать предупреждения
warn "$foo is alive and $foo!"; # это будет напечатано

Реклама