I have bunch of paths. How do I know for example if there is a link in the path?
You won't know from just looking at the string. You'll have to check the filesystem, and for each pathname break it down into its components, using e.g. -l on each one. You can break down a filename using e.g. splitdir from File::Spec, or IMO a little easier, Path::Class. Maybe something like:
use warnings;
use strict;
use Path::Class qw/file dir/;
my $file = file('/tmp/foolink/bar/quz');
my $prev;
while (1) {
die "doesn't exist: $file" unless -e $file;
print $file, " is a ", -l $file ? 'link to '.readlink($file)
: -f $file ? 'file' : -d _ ? 'dir' : 'special', "\n";
$prev = $file;
$file = $file->parent;
last if $prev eq $file;
}
__END__
/tmp/foolink/bar/quz is a file
/tmp/foolink/bar is a dir
/tmp/foolink is a link to foo
/tmp is a dir
/ is a dir
Update: Added a check to the above code to make sure the file exists in the first place. |