# perl
use strict;
use warnings;
use 5.10.1;
use Data::Dumper;$Data::Dumper::Indent=1;
use Data::Dump qw( dd pp );
use Carp;
use Cwd;

my $cwd = cwd();

croak "Must supply file in current directory as command-line argument"
    unless (@ARGV == 1 and -f $ARGV[0]);

my $fails_file = shift(@ARGV);
my %failures = ();
my $rank = 0;
open my $IN, '<', $fails_file or croak "Unable to open $fails_file for reading";
while (my $l = <$IN>) {
    chomp $l;
    my @these_fails = ();
    next unless ((@these_fails) = $l =~ m/Module '([^']+?)' is not installed/g);
    for my $mod (@these_fails) {
        if (! exists $failures{$mod}) {
            $failures{$mod}{count} = 1;
            $failures{$mod}{rank}  = ++$rank;
        }
        else {
            $failures{$mod}{count}++;
        }
    }
}
close $IN or croak "Unable to close $fails_file after reading";
#dd(\%failures);

for my $mod ( sort { $failures{$a}{rank} <=> $failures{$b}{rank} } keys %failures) {
    printf "%3d  %-50s%6d\n" => ($failures{$mod}{rank}, $mod, $failures{$mod}{count});
}

say STDERR "Finished";
