Front page | perl.perl5.porters |
Postings from February 2000
File::Find::finddepth and find2perl -depth isn't depthfirst as find-depth is (fwd)
From:
David Dyck
Date:
February 27, 2000 14:48
Subject:
File::Find::finddepth and find2perl -depth isn't depthfirst as find-depth is (fwd)
Message ID:
Pine.LNX.4.05.10002271445180.11444-100000@dd.tc.fluke.com
After attempting to submit this bug via perlbug
and not getting one of those confirmation reports
I'm sending this to perl5-porters
I've since seen that there was an earlier
report of the bug in File::Find::finddepth, but
that earlier bug didn't report that
find2perl -depth is also broken
David
---------- Forwarded message ----------
Date: Sat, 26 Feb 2000 17:37:26 -0800
From: David Dyck <dcd@tc.fluke.com>
To: perlbug@perl.com
Subject: File::Find::finddepth and find2perl -depth isn't depthfirst as find
-depth is
This is a bug report for perl from dcd@tc.fluke.com,
generated with the help of perlbug 1.27 running under perl v5.5.660.
-----------------------------------------------------------------
[Please enter your report here]
# given a directory tree such as
$ mkdir -p f/g/h
$ touch f/a f/g/b f/g/h/c
I want to get what find -depth reports
$ find f -depth -type d -print
f/g/h
f/g
f
#f2p is my wrapper around find2perl (see below)
$ f2p f -depth -type d -print
f
# Here's a one liner that also just prints11
$ perl -wl -MFile::Find -e 'File::Find::finddepth(
sub { -d $_ && print $File::Find::name; }, "f")'
f
# I wanted all 3 directories to be printed
# instrumenting the wanted subroutine
perl -wl -MCwd -MFile::Find -e 'sub w{ print cwd,"\t\$_=$_\t$File::Find::name" }
File::Find::finddepth( \&w , "f")'
#reports something like (if made the columns line up)
# cwd $_ $File::Find::name
/tmp/f $_=a f/a
/tmp/f $_=. f
/tmp/f/g $_=b f/g/b
/tmp/f/g $_=g f/g
/tmp/f/g/h $_=c f/g/h/c
/tmp/f/g/h $_=h f/g/h
Notice wanted does get called with each of the desired directories
but that
1) they still aren't in the right order, and
2) when calling wanted for directory f/g and f/g/h
we are not chdir'ed to the directory that would allow
testing of -d $_ (we are still in the $_ directory)
####### here is f2p
#!/usr/local/bin/perl
# f2p
# dcd@tc.fluke.com
# immediatly interpret the output find2perl
$FIND2PERL = '/usr/local/bin/find2perl';
pipe(READ, WRITE);
if (fork) {
close(WRITE);
$script = <<'DIE';
$SIG{__DIE__} = sub { print STDERR $_[0]; exit 1; };
DIE
while ($out = <READ>) {
$script .= $out;
}
print "eval $script;\n" if defined($debug);
eval $script;
# test and report if there was a syntax error or runtime error, or a
# die statement was executed
if (length($@)) {
die $@;
}
} else {
close(READ);
close(STDOUT);
open(STDOUT, ">&WRITE");
close(WRITE);
$| = 1;
do $FIND2PERL;
close(STDOUT);
}
[Please do not change anything below this line]
-----------------------------------------------------------------
---
Site configuration information for perl v5.5.660:
Configured by dcd at Thu Feb 24 09:54:36 PST 2000.
Summary of my perl5 (revision 5.0 version 5 subversion 660) configuration:
Platform:
osname=linux, osvers=2.2.15pre10, archname=i686-linux
uname='linux dd 2.2.15pre10 #2 thu feb 24 09:36:58 pst 2000 i686 '
config_args='-Doptimize=-g -de -Dcf_email=dcd@tc.fluke.com'
hint=recommended, useposix=true, d_sigaction=define
usethreads=undef use5005threads=undef useithreads=undef
usesocks=undef useperlio=undef d_sfio=undef
use64bits=undef uselargefiles=define usemultiplicity=undef
Compiler:
cc='cc', optimize='-g', gccversion=2.7.2.3
cppflags='-DDEBUGGING -I/usr/local/include'
ccflags ='-DDEBUGGING -I/usr/local/include'
stdchar='char', d_stdstdio=define, usevfork=false
intsize=4, longsize=4, ptrsize=4, doublesize=8
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=4
alignbytes=4, usemymalloc=n, prototype=define
Linker and Libraries:
ld='cc', ldflags =' -L/usr/local/lib'
libpth=/usr/local/lib /lib /usr/lib
libs=-lgdbm -ldbm -ldb -ldl -lm -lc
libc=/lib/libc.so.5.4.44, so=so, useshrplib=false, libperl=libperl.a
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic'
cccdlflags='-fpic', lddlflags='-shared -L/usr/local/lib'
Locally applied patches:
---
@INC for perl v5.5.660:
/usr/local/lib/perl5/5.5.660/i686-linux
/usr/local/lib/perl5/5.5.660
/usr/local/lib/perl5/site_perl/5.5.660/i686-linux
/usr/local/lib/perl5/site_perl/5.5.660
/usr/local/lib/perl5/site_perl
.
---
Environment for perl v5.5.660:
HOME=/home/dcd
LANG (unset)
LANGUAGE (unset)
LD_LIBRARY_PATH (unset)
LOGDIR (unset)
PATH=/home/dcd/bin:/sbin:/usr/local/bin:/bin:/usr/bin:/usr/X11/bin:/usr/games:/usr/local/samba:/home/hobbes/tools/scripts:/home/hobbes/tools/linux:/usr0/hobbes/tools/scripts:/usr0/dcd/bin:/apps/general/bin:/usr/public
PERL_BADLANG (unset)
SHELL=/bin/bash
-
File::Find::finddepth and find2perl -depth isn't depthfirst as find-depth is (fwd)
by David Dyck