Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/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 );
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement