use strict;
use warnings;
use File::Find;
use File::Slurp qw/read_file/;
my $startDir = '.';
my %dirLines;
find( { wanted => \&countLines, }, $startDir );
for my $dir ( sort keys %dirLines ) {
my $sameResults = sameArrayElements( @{ $dirLines{$dir} } );
print "The files in directory '$dir' do"
. ( $sameResults ? '' : ' not' )
. " have the same number of lines.\n";
}
sub countLines {
/\.txt$/ or return;
#my $completePath = $File::Find::name;
my $curDir = $File::Find::dir;
my $curFile = $_;
my @fileLines = read_file $curFile;
my $numLines = @fileLines;
push @{ $dirLines{$curDir} }, $numLines;
#say "Cur dir: $curDir; Cur file: $curFile; Num Lines: $numLines";
}
sub sameArrayElements {
my %hash = map { $_ => 1 } @_;
keys %hash == 1 ? 1 : 0;
}
####
push @{ $dirLines{$curDir} }, $numLines;
####
$VAR1 = {
'./test/test bbb' => [
6,
6,
6,
6
],
'./test' => [
6,
2,
6,
1
],
'.' => [
6,
2,
6,
10000,
1,
63,
10,
15,
6,
21,
647,
10,
5,
28,
407,
2390,
11,
6,
513,
181,
1,
2,
360,
3
]
};
####
for my $dir ( sort keys %dirLines ) {
my $sameResults = sameArrayElements( @{ $dirLines{$dir} } );
...
####
The files in directory '.' do not have the same number of lines.
The files in directory './test' do not have the same number of lines.
The files in directory './test/test bbb' do have the same number of lines.