Here's a script I hacked together that gives me a basic report on a distribution. It provides a simple listing of each module, sorted by modules with most lines of code along with the number of subroutines in the module, followed by a summary report.
#! /usr/bin/env perl
use strict;
use warnings;
use Devel::Examine::Subs;
use SourceCode::LineCounter::Perl;
use Data::Dumper qw(Dumper);
my $filename = '/path/to/module/directory';
my $des = Devel::Examine::Subs->new( file => $filename );
my $files = $des->all( );
my %subs = ();
my $subroutine_total = 0;
my $counter = SourceCode::LineCounter::Perl->new;
$counter->accumulate(1);
for my $file (sort keys %$files) {
my $name = $file =~ s/$filename//r;
my $old_count = $counter->code;
$counter->count( $file );
my $lines_of_code = $counter->code - $old_count;
my $number_of_subs = scalar @{$files->{$file}};
$subroutine_total += $number_of_subs;
$subs{$name}{sub_names} = join("\n", @{$files->{$file}});
$subs{$name}{lines_of_code} = $lines_of_code;
$subs{$name}{subroutines} = $number_of_subs;
}
print "File listing:\n================\n";
for my $file (sort { $subs{$b}{lines_of_code} <=> $subs{$a}{lines_of_c
+ode} } sort keys %subs) {
print $file . "\n";
print "Number of subroutines: " . $subs{$file}{subroutines};
print "\n";
print "Lines of code: " . $subs{$file}{lines_of_code}. "\n";
# print $subs{$file}{sub_names};
print "\n\n";
}
print "\nTotal # files: " . scalar (keys %subs);
print "\nTotal # subroutines: " . $subroutine_total;
print "\nTotal # lines: " . $counter->total;
print "\nTotal # lines of code: " . $counter->code;