#! /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_code} } 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;