[sf-perl] Question about find2perl output
David Alban
extasia at extasia.org
Thu Mar 16 16:15:00 PST 2006
Greetings,
I fed find2perl as follows:
$ find2perl dir1 dir2 \( \( -name baddir1 -o -name baddir2 \
-o -name baddir3 \) -type d -prune \) -o ! -type l -type f -print
This resulted in the following wanted() subroutine:
sub wanted {
my ($dev,$ino,$mode,$nlink,$uid,$gid);
(
(
/^baddir1\z/s
||
/^baddir2\z/s
||
/^baddir3\z/s
) &&
($nlink || (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_))) &&
-d _ &&
($File::Find::prune = 1)
)
||
($nlink || (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_))) &&
! -l _ &&
-f _ &&
print("$name\n");
}
I believe I understand the reason for the *second* instance of:
$nlink || ( ... ) = lstat( ... )
If $nlink is true we know we've called lstat() and subsequent file
tests on "_" will do The Right Thing(TM). If $nlink is not true then
we haven't called lstat() and need to, to enable those file tests to
succeed.
But it seems to me that in the *first* instance of that code snippet,
$nlink cannot ever be defined. Am I missing something? Not that it
will interfere with the desired functionality, but it seems to be
attempting to handle a case that isn't possible.
$ perl -v
This is perl, v5.8.0 built for sun4-solaris
[...]
$ uname -sr
SunOS 5.8
Thanks,
David
--
Live in a world of your own, but always welcome visitors.
More information about the SanFrancisco-pm
mailing list