Встроенные предупреждения Perl

Вы можете потребовать, чтобы Perl предупреждал вас о выполнении каждой сомнительной операции в вашей программе. Чтобы запустить программу с выводом предупреждений, вставьте в командную строку ключ –w:

$ perl -w my_program

А если режим предупреждений должен действовать при каждом запуске программы, добавьте его в строку #!:

#!/usr/bin/perl -w

Этот способ работает даже в системах, не входящих в семейство UNIX, где традиционно используется запись следующего вида (так как путь к Perl в общем случае не имеет значения):

#!perl -w

В Perl 5.6 и выше предупреждения могут включаться директивой use (но будьте осторожны – такое решение не будет работать в более ранних версиях Perl):

#!/usr/bin/perl
use warnings;

Теперь Perl предупредит о попытке использования строки '12fred34' в числовом контексте:

Argument "12fred34" isn't numeric

Конечно, предупреждения обычно предназначены для программистов, а не для конечных пользователей. Если предупреждение останется незамеченным программистом, вероятно, оно окажется бесполезным. Кроме того, предупреждения не должны изменять поведение программы.


Если вы получили предупреждение, смысл которого вам непонятен, получите более подробное описание проблемы при помощи прагмы diagnostics. В man-странице perldiag приводится как короткое, так и длинное диагностическое описание:

#!/usr/bin/perl
use diagnostics;

При включении директивы use diagnostics запуск программы сопровождается небольшой паузой. Дело в том, что программе приходится выполнять большой объем дополнительной работы (а также выделять большой блок памяти) на случай, если вы захотите прочитать документацию сразу же после обнаружения ошибки. Это открывает возможность применения оптимизации, ускоряющей запуск программы (и расходы памяти), без отрицательных последствий для пользователя; когда надобность в чтении документации по предупреждениям отпадет, удалите из программы директиву use diagnostics. (А еще лучше – исправьте программу, чтобы она не выдавала предупреждения.)

Возможна и дальнейшая оптимизация: параметр командной строки Perl –M позволяет загружать директиву только в случае необходимости. С этим параметром вам не придется редактировать исходный код для включения и отключения режима diagnostics:

$ perl -Mdiagnostics ./my_program
Argument "12fred34" isn't numeric in addition (+) at ./my_program line 17 (#1)
(W numeric) The indicated string was fed as an argument to
an operator that expected a numeric value instead.


If you're
fortunate the message will identify which operator was so unfortunate.

Ситуации, в которых Perl обычно может предупредить о возможной ошибке в коде, будут особо упоминаться в тексте. Однако не стоит рассчитывать на то, что тексты и поведение этих предупреждений останутся неизменными в будущих версиях Perl.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Perl на эту тему:
Автоматическое преобразование между числами и строками
Бинарные операторы присваивания
Вещественные литералы
Выбор имен переменных
Вывод командой print

Вернуться в раздел: Perl / 1. Скалярные данные