




Использование переключателя активирует все предупреждения в модулях все, используемых вашей программой. Используя прагму, вы включаете ее только в этом конкретном модуле (или скрипте). В идеале вы должны использовать предупреждения во всех своих модулях, но часто это не так. Использование переключателя может вызвать множество предупреждений при использовании стороннего модуля, который не является безопасным для предупреждений.
Итак, в идеале это не имеет значения, но с прагматической точки зрения для конечных пользователей часто предпочтительнее использовать не переключатель, а прагму.
Переключатель командной строки -w включает предупреждения глобально для всего интерпретатора. С другой стороны, use warnings - это «лексическая прагма» и применяется только в той лексической области, в которой она используется. Обычно вы помещаете это в начало файла, чтобы оно применялось ко всему файлу, но вы также можете ограничить его определенными блоками. Кроме того, вы можете использовать no warnings, чтобы временно отключить их внутри блока, в тех случаях, когда вам нужно выполнить другое поведение, генерирующее предупреждения. Вы не можете этого сделать, если у вас включен -w.
Дополнительные сведения о том, как работают лексические предупреждения, в том числе о том, как включать и выключать различные их подмножества, см. В документе perllexwarn.
«-w» старше и раньше был единственным способом включения предупреждений (на самом деле «-w» просто включает глобальную переменную $ ^ W). "использовать предупреждения"; теперь предпочтительнее (начиная с версии 5.6.0 и новее), потому что (как уже упоминалось) он имеет лексическую, а не глобальную область видимости, и вы можете включать / выключать определенные предупреждения. И не забудьте также начать с "use strict;" :-)
Начиная с версии 5.6.0. И есть warnings :: compat, которые помогут, если вам все еще небезразлична версия 5.5.
Зафиксированный. Я знал, что надо было просто сказать "5.6" :-)
Но зачем кому-то вообще использовать 5.6.0? :-)
Еще одно отличие, которое стоит отметить, заключается в том, что прагма «использовать предупреждения» также позволяет вам выбирать определенные предупреждения для включения (и аналогично «без предупреждений» позволяет вам выбирать предупреждения для отключения).
Помимо включения / отключения определенных утверждений с помощью прагмы, вы также можете преобразовать некоторые или все предупреждения в ошибки:
use strict;
use warnings FATAL => 'all', NONFATAL => 'exec';
Это хорошая идея во время разработки, но может быть не такой уж и хорошей идеей при развертывании.
Ваша точка зрения на «без предупреждений» - это то, что я ожидал, но быстрый тест (perl -w -e «no warnings; print $ a;») показал, что, по крайней мере, на моем perl, «без предупреждений» все еще работает даже с -w.