Perl::Critic

perlbrew, local::libを構築(略)、cpanmを入れる→~/bin

$ cpanm Perl::Critic
えらー

$ perl Makefile.PL
Writing Makefile for Perl::Critic
Writing MYMETA.yml and MYMETA.json

Versions of optional/unlisted/indirect dependencies:

    File::HomeDir = not installed
    File::Which = not installed
    Readonly::XS = not installed
    Term::ANSIColor = 1.10

$ cpanm File::HomeDir
$ cpanm Readonly::XS

// わからないのでひとつバージョン下げたら上手くいった
$ wget http://search.cpan.org/CPAN/authors/id/E/EL/ELLIOTJS/Perl-Critic-1.115.tar.gz
$ cpanm Perl-Critic-1.115.tar.gz
    • 練習というかチェック
$ perlcritic c.pl
Subroutine prototypes used at line 6, column 1.  See page 194 of PBP.  (Severity: 5)
$ cat c.pl
# vim:set ts=2:
use strict;
use warnings;
use YAML;

sub cmap (&) {     <- プロトタイプ非推奨
  my $f = shift;
  my $r = sub {
    my @result;
    for (@_) {
      push @result, $f->($_);
    }
    @result;
  };
  return $r;
}
    • 裸のワード,open
$ perlcritic b.pl
Bareword file handle opened at line 2, column 1.  See pages 202,204 of PBP.  (Severity: 5)
Two-argument "open" used at line 2, column 1.  See page 207 of PBP.  (Severity: 5)
Code before strictures are enabled at line 2, column 1.  See page 429 of PBP.  (Severity: 5)
$ cat b.pl

open OUT, "/tmp/a"; <- ファイルハンドル$fhとかに、open は2引数じゃなくて3引数
while(<OUT>) {
}
close OUT;
$ perlcritic code/ua.pl
I/O layer ":utf8" used at line 737, column 2.  Use ":encoding(UTF-8)" to get strict validation.  (Severity: 5)