Потому что Perl любит быть крепким.Если бы вы включили warnings
, вы бы услышали об этом.
"my" variable $world masks earlier declaration in same scope at - line 7.
Хотя USUW (use strict; use warnings;
) является хорошей практикой разработки, поэтому будет использовать autodie
- , если Autodie беспокоится о синтаксических предупреждениях.Но следующая концепция примерно такая же, чтобы убедиться, что вы не избегаете никаких предупреждений.
BEGIN { $SIG{__WARN__} = sub { die @_; }; }
Приведенный выше код создает обработчик сигнала для предупреждений, который вместо этого просто умирает.Тем не менее, я думаю, что это лучше для новичка:
BEGIN {
$SIG{__WARN__}
= sub {
eval {
# take me out of the chain, to avoid recursion
delete $SIG{__WARN__};
# diag will install the warn handler we want to use.
eval 'use diagnostics;';
$SIG{__WARN__}->( @_ ); # invoke that handler
};
exit 1; # exit regardless of errors that might have cropped up.
};
}
В любом месте вы можете сказать Perl, что вы не заинтересованы в изменении кода для выдачи определенной категории предупреждений (и diagnostics
будетскажу вам категорию!) и если вы явно укажете perl no warnings 'misc'
, он не только не предупредит вас, но и не вызовет обработчик предупреждений, который убивает программу.
Это даст вамболее c-like чувство - за исключением того, что у c тоже есть предупреждения (так что вы могли бы также реализовать лексический счетчик ... да ладно.)