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.