Должен ли я включать предупреждения Perl с помощью командной строки или прагмы?

Есть ли разница между двумя приведенными ниже примерами для начала Perl script? Если да, то когда я буду использовать один над другим?

пример 1:

#!/usr/bin/perl

use warnings;

Пример 2:

#!/usr/bin/perl -w

Ответы

Ответ 1

Использование этого переключателя позволит включить все предупреждения в модулях all, используемых вашей программой. Используя прагму, вы включаете ее только в этом конкретном модуле (или script). В идеале вы используете предупреждения во всех своих модулях, но часто это не так. Использование коммутатора может дать вам массу предупреждений, если вы используете сторонний модуль, который не является безопасным для сообщений.

Итак, в идеале это не имеет значения, но прагматично часто для ваших конечных пользователей часто не использовать переключатель, кроме прагмы.

Ответ 2

Коммутатор командной строки -w включает глобальные предупреждения для всего интерпретатора. С другой стороны, use warnings является "лексической прагмой" и применяется только в лексической области, в которой она используется. Обычно вы помещаете это в верхнюю часть файла, чтобы оно применимо ко всему файлу, но вы также можете использовать его для определенных блоков. Кроме того, вы можете использовать no warnings, чтобы временно отключить их внутри блока, в тех случаях, когда вам нужно выполнять поведение, порождающее предупреждение. Вы не можете этого сделать, если у вас включен -w.

Подробнее о том, как работают лексические предупреждения, в том числе о том, как включать и выключать различные подмножества из них, см. документ perllexwarn.

Ответ 3

"- w" стареет и используется, чтобы быть единственным способом включить предупреждения (на самом деле "-w" просто включает глобальную переменную $^ W). "использовать предупреждения"; (начиная с версии 5.6.0 и более поздней), потому что (как уже упоминалось) он имеет лексическую, а не глобальную область действия, и вы можете включать/отключать специальные предупреждения. И не забывайте также начинать с "use strict";: -)

Ответ 4

Еще одно замечание, которое стоит отметить, заключается в том, что прагма "use warnings" также позволяет вам выбирать определенные предупреждения для включения (а также "без предупреждений" позволяет вам выбирать предупреждения для отключения).

Ответ 5

Помимо включения/отключения определенных утверждений с помощью прагмы, вы также можете рекламировать некоторые или все предупреждения об ошибках:

use strict;
use warnings FATAL => 'all', NONFATAL => 'exec';

Ответ 6

Сделайте оба! Всегда!