Lint-подобная программа для Perl?

17

Я ищу ворс для Perl, что бы уловить код и другие потенциальные проблемы. Любые предложения?

У меня

use strict;
use warnings;

, но я хотел бы иметь больше.

    
задан Charles 26.07.2011 в 21:10
источник
  • Google "perl lint"? –  Fredrik Pihl 26.07.2011 в 21:14
  • это первый результат для «perl lint» сегодня. –  IanGilham 01.09.2014 в 16:08
  • Рассмотрите использование предупреждений FATAL => 'all'; вместо того, чтобы просто использовать предупреждения ;. –  antred 19.01.2016 в 15:32

4 ответа

9

Perl не имеет прямого эквивалента lint. Значительная часть причин этого заключается в том, что Perl не обеспечивает столько же способов повесить себя, как C. Базовая версия «lint» для Perl такова:

perl -Mstrict [-Mdiagnostics] -cw <file>

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

Если вы хотите что-то еще попробовать, используйте Perl :: Critic , но имейте в виду, что это isn ' В самом деле, тоже. lint в первую очередь относится к ошибкам (например, к тем, что предотвращает компиляцию, запускает ошибки времени выполнения, не переносится, опираться на неопределенное поведение и т. д.). Perl :: Critic больше ориентируется на применение стандартов для кодирования . Хотя есть некоторое перекрытие, они очень разные вещи.

    
ответ дан Michael Carman 26.07.2011 в 22:29
источник
  • Да, Pel :: Критик - это не то, что я хочу по причинам, которые вы описываете. Спасибо за предложение. –  Charles 09.08.2011 в 19:09
  • На Mac (версия El Capitan) он дал мне ошибку каталога с [-Mdiagnostics]. Тем не менее, я смог просто запустить perl -Mstrict -cw myscript.pl, и синтаксис был проверен просто отлично. –  Volomike 02.12.2015 в 01:39
  • @Volomike: не включать квадратные скобки в командной строке. Они были использованы, чтобы показать, что материал в них не является обязательным. –  Michael Carman 02.12.2015 в 16:15
  • Будьте осторожны, ребята. -c все равно может выполнить вашу программу и сильно сломать вас: perldoc.perl.org/... –  Vitaly Dyatlov 24.05.2018 в 17:04
20

Perl :: Critic - ваш друг. Я использую Test :: Perl :: Critic и создаю его в тестах автора моего кода

    
ответ дан Stuart Watt 26.07.2011 в 21:14
источник
  • Улавливает ли он мертвый код? –  Charles 26.07.2011 в 21:17
  • @Charles да, для этого есть политика ControlStructures :: ProhibitUnreachableCode, но это не все знают. Я не думаю, что он анализирует все постоянные выражения, например, но в некоторых из моих работ он взял большинство блоков мертвого кода. –  Stuart Watt 26.07.2011 в 21:24
  • Вы также можете использовать Devel :: Cover или другие профилировщики кода, чтобы найти недостижимый (непроверенный в случае Devel :: Cover) код. –  Eric Strom 26.07.2011 в 21:57
5

Используйте B::Lint . Вы можете использовать его в командной строке, вызвав O модуль с Lint как аргумент, например:

[email protected]:~/sandbox$ perl -MO=Lint Some.pm 
Implicit scalar context for array in logical and (&&) at Some.pm line 121
Implicit scalar context for array in conditional expression at Some.pm line 49
Implicit scalar context for array in logical and (&&) at Some.pm line 132
Some.pm syntax OK
    
ответ дан Alois Mahdal 09.08.2012 в 10:07
источник
  • B :: Линт устарел при 5.18 –  cdarke 12.06.2013 в 11:08
  • @cdarke ... любые ссылки? –  Alois Mahdal 14.06.2013 в 08:23
4

В дополнение к Perl :: Critic вы можете посмотреть новый Perl :: Lint .     

ответ дан Tim Bunce 25.11.2014 в 19:03
источник
  • //, критик Eeeeeveryone –  Nathan Basanese 19.10.2016 в 03:56