Если вы выполните следующее, вы получите предупреждение, плюс небольшое дополнительное объяснение:
perl -Mdiagnostics -Mwarnings -e '$foo=1'
Вывод будет:
Name "main::foo" used only once: possible typo at -e line 1 (#1)
(W once) Typographical errors often show up as unique variable names.
If you had a good reason for having a unique name, then just mention it
again somehow to suppress the message. The our declaration is
provided for this purpose.
NOTE: This warning detects symbols that have been used only once so $c, @c,
%c, *c, &c, sub c{}, c(), and c (the filehandle or format) are considered
the same; if a program uses $c only once but also uses any of the others it
Предупреждение относится к записям таблицы символов(не "мои" лексические переменные). Если вы добавите -Mstrict
к вышеприведенному, вы создадите строгое нарушение, потому что ваша переменная нарушает strict 'vars'
, что запрещает вам использовать переменную, которая не была объявлена, за исключением глобальных пакетов, на которые ссылаются ихквалифицированное имя. Если вы предварительно объявите $foo
с our
, предупреждение исчезнет:
perl -Mdiagnostics -Mwarnings -Mstrict=vars -E 'our $foo=1'
Это работает просто отлично;это позволяет избежать строгого нарушения и избежать предупреждения «один раз». Таким образом, цель предупреждения состоит в том, чтобы предупредить вас об использовании идентификаторов, которые не объявлены, не используют полное имя, а также используются только один раз. Цель состоит в том, чтобы помочь предотвратить опечатки в именах символов, предполагая, что, если вы используете имя символа только один раз и не объявили его, это может быть ошибкой.
Специальные (пунктуация) переменные освобождаются от этогопроверить. Поэтому вы можете ссылаться на $_
или $/
только один раз и не вызывать предупреждение. Кроме того, $a
и $b
освобождены, поскольку они считаются специальными для использования в sort {$a <=> $b} @list
;в таких конструкциях они могут появляться только один раз, но было бы бесполезно выдавать предупреждение за довольно типичный код.
Вы можете найти предупреждение «единожды», указанное в иерархии предупреждений здесь: предупреждения perldoc .
Список всех диагностических пометок доступен в perldoc perldiag .