Улучшите свой Perl код - одно правило Perl::Critic за раз

Perl::Critic perlcritic

Как и большинство людей вы, вероятно, хотите поучиться у более опытных разработчиков и улучшить свой код. Perl::Critic это прекрасная штука для этого.

Perl::Critic это CPAN-модуль, но изначально это была утилита командной сроки, которая проверяла ваш код на соответствие набору правил.

Запуск Perl Critic

После установки Perl::Critic с CPAN, вам станет доступна утилита, называемая perlcritic. Ее можно вызвать из командной строки:

perlcritic lib/Module/Name.pm

Это сгенерирует большой отчет.

Например, в моем случае я получил множество строк, типа это:

lib/Module/Name.pm: Subroutine prototypes used at line 15, column 1.
    See page 194 of PBP.  (Severity: 5)

и еще множество других предупреждений.

Каждая запись скажет вам точно, какое правило было нарушено в коде, и где в книге "Perl Best Practices" вы можете прочитать описание этого правила.

Не волнуйтесь, есть флаг --verbose N, который устанавливает детализированность вывода. По умолчанию он имеет уровень 4, но вы можете сделать его поменьше, чтобы получать менее детальный вывод, или больше, чтобы получить больше подробностей. (Согласно документации, N может принимать значения от 1 до 11)

При значении 8, утилита начнет показывать имя правила: Выполните команду: perlcritic --verbose 8 lib/Module/Name.pm

и сообщения в отчете изменятся следующим образом

[Subroutines::ProhibitSubroutinePrototypes]
   Subroutine prototypes used at line 15, column 1.  (Severity: 5)

Отключаем правила по одному

Вы можете создать файл .perlcriticrc в домашней директории своего проекта с таким содержимым:

[-Subroutines::ProhibitSubroutinePrototypes]

Это отключит конкретное правило для вашего проекта.

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

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

Проверка с использованием только одного правила

А как проверить свой код, используя только одно правило? И для этого тоже есть флаг - --single-policy

perlcritic --single-policy Subroutines::ProhibitSubroutinePrototypes lib/Module/Name.pm

Это прекрасно! Теперь вы можете понять, где код нарушает именно это правило, и исправить его. Этот прием будет работать даже в том случае, если вы отключили это правило в конфигурационном файле.

Перед тем, как исправлять проблему, вам стоит почитать описание этого правила в книге Perl Best Practices или почитать объяснения сообщества. Это легко. Просто установите уровень --verbose 10 и вы увидете что-то в этом роде:

Subroutine prototypes used at line 15, column 1.
  Subroutines::ProhibitSubroutinePrototypes (Severity: 5)
    Contrary to common belief, subroutine prototypes do not enable
    compile-time checks for proper arguments. Don't use them.

Это правило имеет краткое описание, некоторые другие (например, Subroutines::ProhibitExplicitReturnUndef) имеют действительно большое и подробное описание.

Заключение

Приводя свой код в порядок, возможно, вы захотите найти какие-то конкретные проблемы и исправить их по всему проекту. (Вместо того, чтобы исправить только в одном файле.)

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

Otras páginas

Lvalue substr - замена части строки

Author

Gabor Szabo (szabgab) Gabor Szabo