Я попытаюсь угадать реальную мотивацию здесь. Не стесняйтесь сказать мне, если я угадал.
Я подозреваю, что вы пытаетесь заняться большой, более старой кодовой базой и хотели бы включить ограничения, но вы сначала надеялись получить представление о том, где будут ошибки (и сколько их будет) без нарушения функциональности. К сожалению, поскольку use strict
функционирует путем изменения внутреннего поведения синтаксического анализатора и интерпретатора perl, не существует «строгого строгого» или, по аналогии с html, какого-либо «переходного» режима.
Однако вы можете отделить функциональность use strict
, чтобы начать движение в правильном направлении. Во-первых, обратите внимание, что на самом деле есть три отдельные части:
use strict 'refs'; # no symbolic references
use strict 'vars'; # must declare variables
use strict 'subs'; # no barewords
и из этих только 'refs' выдает ошибки во время выполнения. Таким образом, вы можете легко добавить use strict qw(vars subs)
к каждому из ваших файлов (скриптов и модулей) и протестировать их с помощью perl -c
. Если вы обнаружите какие-либо сообщения об ошибках, закомментируйте use strict
или, по крайней мере, одну из двух неудачных проверок, добавьте комментарий о характере ошибки и продолжайте. Таким образом, вы можете быстро (в зависимости от количества файлов) определить, какие файлы имеют ошибки во время компиляции, и вернуться к ним позже. (Если бы вы были более мотивированы, чем я в данный момент, вы могли бы даже автоматизировать этот процесс). Если у вас нет кода, который делает страшные вещи внутри BEGIN
блоков, это должно быть довольно безопасно.
Более сложная часть заключается в проверке ошибок времени выполнения, генерируемых use strict 'refs'
, и, к сожалению, на самом деле не существует простого способа сделать это, потому что ошибки вызываются символьными ссылками, которые не могут быть определены никаким видом статики. анализ, так что -c и / или Perl :: Critic бесполезны.
Надеюсь, это приблизит вас к решению вашей реальной проблемы.