
Untitled
By: a guest on
Jul 25th, 2012 | syntax:
Perl | size: 1.41 KB | hits: 402 | expires: Never
#!/usr/bin/perl
use strict;
use warnings;
my @Source_Files;
my @Directories;
my $Regex;
my $Top_Dir;
sub Initialize {
if ( @ARGV ) {
$Top_Dir = pop @ARGV;
}
else {
$Top_Dir = ".";
}
if ( @ARGV ) {
$Regex = pop @ARGV;
}
else {
$Regex = '\.(?:plx|c(pp)?|h|bat)$';
}
push @Directories, $Top_Dir;
}
sub Get_Files {
opendir my $Directory, $_[0] or die "Couldn't open $_[0]: $!\n";
my @File_List = grep !/^\./, readdir $Directory;
for (@File_List) {
$_ = $_[0]."/".$_;
}
return @File_List;
}
sub Sort_Files {
for (@_) {
if ( -d $_ ) {
push @Directories, $_;
}
elsif ( $_ =~ /$Regex/ ) {
push @Source_Files, $_;
}
}
return 1;
}
sub Count_Source {
my $Total = 0;
my @Source_Counts;
for (0..$#Source_Files) {
open my $file, "<", $Source_Files[$_]
or die "Couldn't open $Source_Files[$_]: $!\n";
$Source_Counts[$_] = 0;
while ( my $line = <$file> ) {
$Total++;
$Source_Counts[$_]++;
}
}
push @Source_Counts, $Total;
return @Source_Counts;
}
sub Print_Results {
my $Total_Lines = pop @_;
for (0..$#Source_Files) {
print "$Source_Files[$_]: $_[$_]\n";
}
print "Total Lines: $Total_Lines\n";
}
{
Initialize;
while ( @Directories ) {
my $Current_Directory = pop @Directories;
Sort_Files ( Get_Files ( $Current_Directory ) );
}
Print_Results ( Count_Source );
}