use strict; use warnings; use Cwd 'abs_path'; my($path) = @ARGV; ## add path to a directory print "Input path: $path\n"; print "## no modifications to readdir output (as mentioned in the docs this is bad for filetesting)\n"; opendir(my $dh, $path) or die "Cannot open dir $path: $!\n"; while(readdir($dh)) { #print "Testing $_\n"; if(-z $_) { print "File $_ is empty\n\n"; } elsif(-d $_) { print "File $_ is a directory\n\n"; } elsif(-f $_) { print "File $_ is a plain file\n\n"; } elsif(-B $_) { print "Path $_ points\tto a binary file\n\n"; } else { print "Not recognized: $_\n\n"; } } closedir($dh); print "## using abs_path\n"; opendir(my $dh1, $path) or die "Cannot open dir $path: $!\n"; while(readdir($dh1)) { my $abs_path = abs_path($_); #print "Testing $abs_path\n"; if(-z $abs_path) { print "Path $abs_path\tpoints to an empty file\n\n"; } elsif(-d $abs_path) { print "Path $abs_path\tis a directory\n\n"; } elsif(-f $abs_path) { print "Path $abs_path points\tto a plain file\n\n"; } elsif(-B $abs_path) { print "Path $abs_path points\tto a binary file\n\n"; } else { print "Not recognized: $abs_path\n\n"; } } closedir($dh1); print "## using $path/filename\n"; opendir(my $dh2, $path) or die "Cannot open dir $path: $!\n"; while(readdir($dh2)) { my $abs_path_mod = abs_path("$path/$_"); #print "Testing $abs_path_mod\n"; if(-z $abs_path_mod) { print "Path $abs_path_mod\tpoints to an empty file\n\n"; } elsif(-d $abs_path_mod) { print "Path $abs_path_mod\tis a directory\n\n"; } elsif(-f $abs_path_mod) { print "Path $abs_path_mod points\tto a plain file\n\n"; } elsif(-B $abs_path_mod) { print "Path $abs_path_mod points\tto a binary file\n"; } else { print "Not recognized: $abs_path_mod\n"; } } closedir($dh2); print "## using $path/filename w/o abs_path\n"; opendir(my $dh3, $path) or die "Cannot open dir $path: $!\n"; while(readdir($dh3)) { my $path_mod = "$path/$_"; #print "Testing $path_mod\n"; if(-z $path_mod) { print "Path $path_mod\tpoints to an empty file\n\n"; } elsif(-d $path_mod) { print "Path $path_mod\tis a directory\n\n"; } elsif(-f $path_mod) { print "Path $path_mod points\tto a plain file\n\n"; } elsif(-B $path_mod) { print "Path $path_mod points\tto a binary file\n"; } else { print "Not recognized: $path_mod\n"; } } closedir($dh3);