The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

use strict;
use FindBin qw/$RealBin/;
use Cwd qw/abs_path/;
use Perl::Critic;
use File::Next;
use File::Spec;

my $path = abs_path( File::Spec->catdir( $RealBin, '..', '..' ) );

my $files  = File::Next::files($path);
my $critic = Perl::Critic->new();

open( my $fh, '>', File::Spec->catfile( $RealBin, 'critic.txt' ) );
flock( $fh, 2 );

while ( defined( my $file = $files->() ) ) {
    next if ( $file !~ /\.(p[ml]|t)$/ );    # only .pm .pl .t
    next if ( $file =~ /Schema\.pm$/ );     # skip this file
    next
        if ( $file =~ /(\/|\\)Schema(\/|\\)/ )
        ;                                   # skip Schema dir and Schema.pm
    next if ( $file =~ /Version\.pm/ );     # skip Foorum/Version.pm

    print "$file\n";

    my @violations = $critic->critique($file);
    $file =~ s/\\/\//isg;                   # for Win32
    $file =~ s/^$path//isg;
    unless ( scalar @violations ) {
        print $fh "$file source OK\n";
    } else {
        foreach (@violations) {
            print $fh "$file: $_";
        }
    }
}
close($fh);

1;