Advertisement
Guest User

Untitled

a guest
Jul 25th, 2012
648
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 1.41 KB | None | 0 0
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. my @Source_Files;
  6. my @Directories;
  7. my $Regex;
  8. my $Top_Dir;
  9.  
  10. sub Initialize {
  11.     if ( @ARGV ) {
  12.             $Top_Dir = pop @ARGV;
  13.         }
  14.         else {
  15.             $Top_Dir = ".";
  16.         }
  17.        
  18.         if ( @ARGV ) {
  19.             $Regex = pop @ARGV;
  20.         }
  21.         else {
  22.             $Regex = '\.(?:plx|c(pp)?|h|bat)$';
  23.         }
  24.  
  25.         push @Directories, $Top_Dir;
  26. }
  27.    
  28. sub Get_Files {
  29.     opendir my $Directory, $_[0] or die "Couldn't open $_[0]: $!\n";
  30.     my @File_List = grep !/^\./, readdir $Directory;
  31.    
  32.     for (@File_List) {
  33.         $_ = $_[0]."/".$_;
  34.     }
  35.    
  36.     return @File_List;
  37. }
  38.  
  39. sub Sort_Files {
  40.     for (@_) {
  41.         if ( -d $_ ) {
  42.             push @Directories, $_;
  43.         }
  44.         elsif ( $_ =~ /$Regex/ ) {
  45.             push @Source_Files, $_;
  46.         }
  47.     }
  48.     return 1;
  49. }
  50.  
  51. sub Count_Source {
  52.     my $Total = 0;
  53.     my @Source_Counts;
  54.     for (0..$#Source_Files) {
  55.         open my $file, "<", $Source_Files[$_]
  56.             or die "Couldn't open $Source_Files[$_]: $!\n";
  57.         $Source_Counts[$_] = 0;
  58.         while ( my $line = <$file> ) {
  59.             $Total++;
  60.             $Source_Counts[$_]++;
  61.         }
  62.     }
  63.     push @Source_Counts, $Total;
  64.     return @Source_Counts;
  65. }
  66.  
  67. sub Print_Results {
  68.     my $Total_Lines = pop @_;
  69.    
  70.     for (0..$#Source_Files) {
  71.         print "$Source_Files[$_]: $_[$_]\n";
  72.     }
  73.     print "Total Lines: $Total_Lines\n";
  74. }
  75.    
  76. {
  77.     Initialize;
  78.  
  79.     while ( @Directories ) {
  80.         my $Current_Directory = pop @Directories;
  81.         Sort_Files ( Get_Files ( $Current_Directory ) );
  82.     }
  83.    
  84.     Print_Results ( Count_Source );
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement