This is a bug report for perl from [email protected]
generated with the help of perlbug 1.33 running under perl v5.6.1.
-----------------------------------------------------------------
[Please enter your report here]
This is a pod patch and a bug report.
Documentation update:
*** perlfunc.pod.orig Thu Jan 4 20:34:28 2001
--- perlfunc.pod Wed Mar 28 21:03:29 2001
***************
*** 1985,1990 ****
--- 1985,1998 ----
Beginning with v5.6.0, this operator is implemented using the standard
C<File::Glob> extension. See L<File::Glob> for details.
+ In scalar context, returns one name at a time. Call glob with the
+ same arguments repeatedly to get them all.
+
+ perl -le 'while ($_ = glob "/tmp/*") {print}'
+
+ Note: glob() in scalar context is not recursive. Use C<File::Find>
+ to process subdirectories.
+
=item gmtime EXPR
Converts a time as returned by the time function to a 8-element list
---------------------------------------
Bug report:
When called in scalar context, glob() returns one name at a time. This
works OK if glob() is called repeated with the same argument over and
over until the cached list of matches is exhausted.
But if glob() is called with a different argument before the cache is
emptied, the partial results are not saved. Recursive descent down the
directory tree is OK, but an infinite loop occurs on the way back up.
glob() should either handle recursive calls in scalar context, or it
should die() cleanly on the way back up.
The enclose program exhibits the error when run with a nonzero command
line argument (such as "9").
#!/bin/perl
print "Testing use of repeated calls to glob() in scalar context\n";
# Should produce results similar to grep(!/^\./,readdir()).
$start = "/etc/lp"; # A not-very deep dir tree on Solaris-6
$max = @ARGV ? shift : 0; # Number of directories to do in bug mode
print $max ? "Recursive mode: expect failure\n" : "Works: push results\n";
$count = $depth = 0;
do_dir("$start/");
print "done\n";
sub do_dir {
my $dir = shift;
my $prefix = " " x ++$depth;
my @todo;
my $files = $dir . "*";
print "$prefix Looking for $files\n";
die "Too many directories processed: $max" if $max && ++$count > $max;
while ($name = glob $files) { # Repeated calls in scalar context
if (-d $name) {
print "$prefix $name is a directory\n";
$max ? do_dir("$name/") : push @todo,"$name/";
} else {
print "$prefix $name is not a directory\n";
}
}
foreach $dir (@todo) { # If $max set, do dirs after loop
do_dir($dir);
}
print "$prefix End of $files\n";
--$depth;
}
[Please do not change anything below this line]
-----------------------------------------------------------------
---
Flags:
category=core
severity=medium
---
Site configuration information for perl v5.6.1:
Configured by jms at Thu Jan 4 15:37:43 PST 2001.
Summary of my perl5 (revision 5.0 version 6 subversion 1) configuration:
Platform:
osname=solaris, osvers=2.6, archname=sun4-solaris
uname='sunos centauri 5.6 generic_105181-07 sun4u sparc sunw,ultra-2 '
config_args='-de'
hint=recommended, useposix=true, d_sigaction=define
usethreads=undef use5005threads=undef useithreads=undef usemultiplicity=undef
useperlio=undef d_sfio=undef uselargefiles=define usesocks=undef
use64bitint=undef use64bitall=undef uselongdouble=undef
Compiler:
cc='gcc', ccflags ='-fno-strict-aliasing -I/usr/local/include -I/opt/local/include -I/opt/gnu/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
optimize='-O',
cppflags='-fno-strict-aliasing -I/usr/local/include -I/opt/local/include -I/opt/gnu/include'
ccversion='', gccversion='2.95.2 19991024 (release)', gccosandvers='solaris2.6'
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=4321
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
alignbytes=8, usemymalloc=y, prototype=define
Linker and Libraries:
ld='gcc', ldflags =' -L/usr/local/lib -L/opt/local/lib -L/opt/gnu/lib '
libpth=/usr/local/lib /opt/local/lib /opt/gnu/lib /lib /usr/lib /usr/ccs/lib
libs=-lsocket -lnsl -lgdbm -ldb -ldl -lm -lc -lcrypt -lsec
perllibs=-lsocket -lnsl -ldl -lm -lc -lcrypt -lsec
libc=/lib/libc.so, so=so, useshrplib=false, libperl=libperl.a
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags=' '
cccdlflags='-fPIC', lddlflags='-G -L/usr/local/lib -L/opt/local/lib -L/opt/gnu/lib'
Locally applied patches:
v5.6.1-TRIAL1
---
@INC for perl v5.6.1:
/usr/local/lib/perl5/5.6.1/sun4-solaris
/usr/local/lib/perl5/5.6.1
/usr/local/lib/perl5/site_perl/5.6.1/sun4-solaris
/usr/local/lib/perl5/site_perl/5.6.1
/usr/local/lib/perl5/site_perl/5.6.0/sun4-solaris
/usr/local/lib/perl5/site_perl/5.6.0
/usr/local/lib/perl5/site_perl/5.005/sun4-solaris
/usr/local/lib/perl5/site_perl/5.005
/usr/local/lib/perl5/site_perl
.
---
Environment for perl v5.6.1:
HOME=/centauri/home/mci/jms
LANG (unset)
LANGUAGE (unset)
LC_COLLATE=en_US
LD_LIBRARY_PATH (unset)
LOGDIR (unset)
PATH=/centauri/home/mci/jms/bin:/centauri/home/mci/jms/bin.sunos5:/centauri/home/mci/jms/bin.sparc:/usr/openwin/bin:/usr/newsprint/bin:/usr/X11R6/bin:/usr/X11R5/bin:/opt/SUNWspro/bin:/usr/ccs/bin:/usr/ucb:/usr/bin:/usr/sbin:/sbin:/usr/proc/bin:/usr/local/bin:/usr/local/etc:/usr/local/admin:/opt/gnu/bin:/usr/local/samba/bin:/usr/tym:/usr/shosts:/mww/mybin
PERL_BADLANG (unset)
SHELL=/bin/tcsh