Pastebin launched a little side project called HostCabi.net, check it out ;-)Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jul 25th, 2012  |  syntax: Perl  |  size: 1.41 KB  |  hits: 481  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  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. }