Поскольку предупреждение не распечатывается, оно должно быть die
раньше.Perl обычно не умирает с ошибками ввода-вывода, если вы не используете такой модуль, как Fatal
(теперь не рекомендуется в качестве интерфейса) или autodie
(предпочтительный интерфейс).
Итак, вы можете посмотреть на включение модулей autodie
или Fatal
в текущее время выполнения:
say "Fatal included from : $INC{'Fatal.pm'}";
Примечание: предпочтительный autodie
включает Fatal
, поэтому одна проверкадля любого из них.
Конечно, один из более полных способов выяснить, что он делает, это использовать
perl -d /path/to/io_script_dying_on_me.pl
и пройти через IO :: File :: newвызов - однако, некоторые модули Perl действуют по-разному при обнаружении отладчика .
Если бы он напечатал ваше сообщение, кто-то мог бы отменить предупреждение о том, что warn
умретна предупреждения.Это можно сделать, изменив обработчик предупреждений ($SIG{__WARN__}
) или установив другое определение в пространство имен CORE::GLOBAL
.Вы можете проверить это с помощью следующего:
use Data::Dumper;
$Data::Dumper::Deparse = 1;
say Data::Dumper->Dump( [ $SIG{__WARN__} ], [ '$SIG{__WARN__}' ] );
say Data::Dumper->Dump( [ \&CORE::GLOBAL::warn ], [ '*CORE::GLOBAL::warn' ] );