For a decent number of files, you can use:
sub get_files_count {
my ($dir) = @_;
opendir my $dir_h, $dir or return 0;
# Number of files
return scalar grep { -f "$dir/$_" } readdir $dir_h;
# Number of files+dirs
return scalar @{[readdir $dir_h]} - 2;
}
print get_files_count('./');
Or for a larger number of files, you can use:
sub get_files_count {
my ($dir) = @_;
opendir my $dir_h, $dir or return 0;
my $files = 0;
while(defined(my $file = readdir $dir_h)){
if($file eq '.' or $file eq '..'){ next; }
# Uncomment the bellow line to count only files
# next unless -f "$dir/$file";
++$files;
}
closedir $dir_h;
return $files;
}
print get_files_count('./');