Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

i am usign a perl script in which i try to find whether the direcory is leaf directory or not by seeing nlink value.
i do it by

$info = stat("."); $nlink = $info->nlink;
this will give me the value of nlink for that directory. now i test if that directory is leaf directory by doing
if ((($nlink == 3) && (-e "ROOT")) || $nlink == 2) { $leafDir = 1; }
here ROOT is a directory which can be or can not be present in all test directories. so i test if nlink is three (3) and if that ROOT directory is present to see if the directory is leaf directory. if the ROOT is not present then i test if nlink is 2 ( for . and ..). this works fine with linux and solaris. but in cygwin i am not getting the same value of nlink as i m getting in linux.
what can i do to make this working in cygwin also. is there some other way by which i can do this job using nlink value.

Edited by planetscape - added code tags

Replies are listed 'Best First'.
Re: finding a directory using perl in cygwin
by Corion (Patriarch) on Mar 09, 2006 at 07:28 UTC

    Using the nlink field is a practice that does not work for many file systems, at least VFAT/FAT32, NTFS, ISO9660, and likely the MacOS file systems as well. If you look at what contortions File::Find goes through to find out if the nlink value can be trusted, I guess it's better to either use File::Find, or to avoid the whole "optimization".