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; }