package File::Find;
require 5.000;
require Exporter;
-require Config;
+use Config;
require Cwd;
require File::Basename;
the function is called. The function may set $File::Find::prune to
prune the tree.
+File::Find assumes that you don't alter the $_ variable. If you do then
+make sure you return it to its original value before exiting your function.
+
This library is primarily for the C<find2perl> tool, which when fed,
find2perl / -name .nfs\* -mtime +7 \
sub find {
my $wanted = shift;
- my $cwd = Cwd::fastcwd();
- my ($topdir,$topdev,$topino,$topmode,$topnlink);
+ my $cwd = Cwd::cwd();
+ # Localize these rather than lexicalizing them for backwards
+ # compatibility.
+ local($topdir,$topdev,$topino,$topmode,$topnlink);
foreach $topdir (@_) {
(($topdev,$topino,$topmode,$topnlink) = stat($topdir))
|| (warn("Can't stat $topdir: $!\n"), next);
&$wanted;
my $fixtopdir = $topdir;
$fixtopdir =~ s,/$,, ;
- $fixtopdir =~ s/\.dir$// if $Is_VMS; ;
+ $fixtopdir =~ s/\.dir$// if $Is_VMS;
+ $fixtopdir =~ s/\\dir$// if $Is_NT;
&finddir($wanted,$fixtopdir,$topnlink);
}
else {
}
}
else {
- unless (($dir,$_) = File::Basename::fileparse($topdir)) {
+ unless (($_,$dir) = File::Basename::fileparse($topdir)) {
($dir,$_) = ('.', $topdir);
}
$name = $topdir;
# Get link count and check for directoriness.
- ($dev,$ino,$mode,$nlink) = ($Is_VMS ? stat($_) : lstat($_))
- unless ($nlink || $dont_use_nlink);
+ ($dev,$ino,$mode,$nlink) = ($Is_VMS ? stat($_) : lstat($_));
+ # unless ($nlink || $dont_use_nlink);
if (-d _) {
if (!$prune && chdir $_) {
$name =~ s/\.dir$// if $Is_VMS;
+ $name =~ s/\\dir$// if $Is_NT;
&finddir($wanted,$name,$nlink);
chdir '..';
}
$cwd = Cwd::fastcwd();;
- my($topdir, $topdev, $topino, $topmode, $topnlink);
+ # Localize these rather than lexicalizing them for backwards
+ # compatibility.
+ local($topdir, $topdev, $topino, $topmode, $topnlink);
foreach $topdir (@_) {
(($topdev,$topino,$topmode,$topnlink) = stat($topdir))
|| (warn("Can't stat $topdir: $!\n"), next);
my $fixtopdir = $topdir;
$fixtopdir =~ s,/$,, ;
$fixtopdir =~ s/\.dir$// if $Is_VMS;
+ $fixtopdir =~ s/\\dir$// if $Is_NT;
&finddepthdir($wanted,$fixtopdir,$topnlink);
($dir,$_) = ($fixtopdir,'.');
$name = $fixtopdir;
}
}
else {
- unless (($dir,$_) = File::Basename::fileparse($topdir)) {
+ unless (($_,$dir) = File::Basename::fileparse($topdir)) {
($dir,$_) = ('.', $topdir);
}
chdir $dir && &$wanted;
if (chdir $_) {
$name =~ s/\.dir$// if $Is_VMS;
+ $name =~ s/\\dir$// if $Is_NT;
&finddepthdir($wanted,$name,$nlink);
chdir '..';
}
$dont_use_nlink = 1 if ($Config::Config{'dont_use_nlink'});
# These are hard-coded for now, but may move to hint files.
-if ($Config::Config{'osname'} eq 'VMS') {
+if ($^O eq 'VMS') {
$Is_VMS = 1;
$dont_use_nlink = 1;
}
+if ($^O =~ m:^mswin32:i) {
+ $Is_NT = 1;
+ $dont_use_nlink = 1;
+}
-$dont_use_nlink = 1 if $Config::Config{'osname'} =~ m:^os/?2$:i ;
-$dont_use_nlink = 1 if $Config::Config{'osname'} =~ m:^mswin32$:i ;
+$dont_use_nlink = 1
+ if $^O eq 'os2' || $^O eq 'msdos' || $^O eq 'amigaos';
1;