Подтвердить что ты не робот

Есть ли проблемы с "использованием диагностики"?

С perl я почти всегда использую:

use strict;
use diagnostics;

Я предложил "использовать диагностику" вместо use warnings; здесь, и я получил некоторую отрицательную обратную связь. Итак, теперь я думаю:

Есть ли проблема с use diagnostics;?

4b9b3361

Ответ 1

diagnostics не является лексической прагмой, подобной warnings. Вместо этого он устанавливает глобальную переменную $^W (например, используя флаг -w), который позволяет предупреждать обо всех кодах, хочет он это или нет, и писал ли вы это или нет. Это грубо. diagnostics также глупо использовать в производстве. Я бы порекомендовал использовать warnings, а затем просто передал ваши предупреждения на splain, если вам нужно объяснение.

Ответ 2

use diagnostics замедлит выполнение вашего кода больше, чем use warnings. Это нормально, если вы получаете предупреждение, которое не понимаете во время разработки, но лучше всего отключить его, когда закончите.

Ответ 3

Диагностика pragma - это инструмент разработки, который вам не нужен часто. Используйте его по мере необходимости:

$ perl -Mdiagnostics myprog

Включение прагмы в командной строке -M switch означает, что вам не нужно забывать возвращаться и удалять тестовую версию, только use diagnostics от вашего кода.

Ответ 4

Если вы еще не обновили версию perl версии 5.12, диагностика имеет ошибку, которая маскирует конкретное предупреждение. Исправлена ​​ошибка в 5.12 (см. perl512delta):

диагностика больше не подавляется неинициализированного значения в диапазоне (или флип). [perl # 71204]

Как только я узнал об ошибке, я вернулся и прокомментировал use diagnostics; из всего моего кода. Если я получаю предупреждающие сообщения, я раскомментирую их временно, но всегда возвращаюсь назад и прокомментирую это снова.