Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

stat() on unopened filehandle _ #10002

Closed
p5pRT opened this issue Dec 2, 2009 · 6 comments
Closed

stat() on unopened filehandle _ #10002

p5pRT opened this issue Dec 2, 2009 · 6 comments

Comments

@p5pRT
Copy link

p5pRT commented Dec 2, 2009

Migrated from rt.perl.org#71002 (status was 'resolved')

Searchable as RT71002$

@p5pRT
Copy link
Author

p5pRT commented Dec 2, 2009

From schmorp@schmorp.de

Created by schmorp@schmorp.de

This emits a warning​:

  # perl -e 'use warnings; stat "/xyz"; stat _'
  stat() on unopened filehandle _ at -e line 1.

however, the warning is wrong - stat _ should work exactly like the
previous stat, which does not emit a warning.

Perl Info

Flags:
    category=core
    severity=low

Site configuration information for perl 5.10.0:

Configured by Marc Lehmann at Sat Feb 21 02:30:27 CET 2009.

Summary of my perl5 (revision 5 version 10 subversion 0) configuration:
  Platform:
    osname=linux, osvers=2.6.24-etchnhalf.1-amd64, archname=amd64-linux
    uname='linux cerebro 2.6.24-etchnhalf.1-amd64 #1 smp mon jul 21 10:36:02 utc 2008 x86_64 gnulinux '
    config_args='-Duselargefiles -Dxxxxuse64bitint -Uuse64bitall -Dusemymalloc=n -Dcc=gcc -Dccflags=-ggdb -gdwarf-2 -g3 -Dcppflags=-DPERL_ARENA_SIZE=16368 -D_GNU_SOURCE -I/opt/include -Doptimize=-O6 -msse2 -funroll-loops -fno-strict-aliasing -Dcccdlflags=-fPIC -Dldflags=-L/opt/perl/lib -L/opt/lib -Dlibs=-ldl -lm -lcrypt -Darchname=amd64-linux -Dprefix=/opt/perl -Dprivlib=/opt/perl/lib/perl5 -Darchlib=/opt/perl/lib/perl5 -Dvendorprefix=/opt/perl -Dvendorlib=/opt/perl/lib/perl5 -Dvendorarch=/opt/perl/lib/perl5 -Dsiteprefix=/opt/perl -Dsitelib=/opt/perl/lib/perl5 -Dsitearch=/opt/perl/lib/perl5 -Dsitebin=/opt/perl/bin -Dman1dir=/opt/perl/man/man1 -Dman3dir=/opt/perl/man/man3 -Dsiteman1dir=/opt/perl/man/man1 -Dsiteman3dir=/opt/perl/man/man3 -Dman1ext=1 -Dman3ext=3 -Dpager=/usr/bin/less -Uafs -Uusesfio -Uusenm -Uuseshrplib -Dd_dosuid -Dusethreads=undef -Duse5005threads=undef -Duseithreads=undef -Dusemultiplicity=undef -Demail=perl-binary@plan9.de -Dcf_email=perl-binary@plan9.de -Dcf_by=Marc Lehmann -Dlocincpth=/opt/perl/include /opt/include -Dmyhostname=localhost -Dmultiarch=undef -Dbin=/opt/perl/bin -Dxxxusedevel -DxxxDEBUGGING -Dxxxuse_debugging_perl -Dxxxuse_debugmalloc -des'
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=undef, usemultiplicity=undef
    useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
    use64bitint=define, use64bitall=undef, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='gcc', ccflags ='-ggdb -gdwarf-2 -g3 -fno-strict-aliasing -pipe -I/opt/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
    optimize='-O6 -msse2 -funroll-loops -fno-strict-aliasing',
    cppflags='-DPERL_ARENA_SIZE=16368 -D_GNU_SOURCE -I/opt/include -ggdb -gdwarf-2 -g3 -fno-strict-aliasing -pipe -I/opt/include'
    ccversion='', gccversion='4.3.2', gccosandvers=''
    intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
    ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='gcc', ldflags ='-L/opt/perl/lib -L/opt/lib -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib /lib64 /usr/lib64
    libs=-ldl -lm -lcrypt
    perllibs=-ldl -lm -lcrypt
    libc=/lib/libc-2.7.so, so=so, useshrplib=false, libperl=libperl.a
    gnulibc_version='2.7'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
    cccdlflags='-fPIC', lddlflags='-shared -O6 -msse2 -funroll-loops -fno-strict-aliasing -L/opt/perl/lib -L/opt/lib -L/usr/local/lib'

Locally applied patches:
    http://public.activestate.com/cgi-bin/perlbrowse/p/34209
    http://public.activestate.com/cgi-bin/perlbrowse/p/34507
    http://www.gossamer-threads.com/lists/perl/porters/232549
    embed.fnc:Perl_vcroak NULLOK


@INC for perl 5.10.0:
    /root/src/sex
    /opt/perl/lib/perl5
    /opt/perl/lib/perl5
    /opt/perl/lib/perl5
    /opt/perl/lib/perl5
    /opt/perl/lib/perl5
    .


Environment for perl 5.10.0:
    HOME=/root
    LANG (unset)
    LANGUAGE (unset)
    LC_CTYPE=en_US.UTF-8
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/root/s2:/root/s:/opt/bin:/opt/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11/bin:/usr/games:/usr/local/bin:/usr/local/sbin:/root/pserv:.
    PERL5LIB=/root/src/sex
    PERL5_CPANPLUS_CONFIG=/root/.cpanplus/config
    PERLDB_OPTS=ornaments=0
    PERL_ANYEVENT_DBI_TESTS=1
    PERL_ANYEVENT_EDNS0=1
    PERL_ANYEVENT_NET_TESTS=1
    PERL_ANYEVENT_PROTOCOLS=ipv4,ipv6
    PERL_ANYEVENT_STRICT=1
    PERL_BADLANG (unset)
    PERL_UNICODE=E
    SHELL=/bin/bash

@p5pRT
Copy link
Author

p5pRT commented Dec 3, 2009

From @Abigail

On Wed, Dec 02, 2009 at 09​:38​:14AM -0800, schmorp@​schmorp.de (via RT) wrote​:

# New Ticket Created by schmorp@​schmorp.de
# Please include the string​: [perl #71002]
# in the subject line of all future correspondence about this issue.
# <URL​: http​://rt.perl.org/rt3/Ticket/Display.html?id=71002 >

This is a bug report for perl from schmorp@​schmorp.de,
generated with the help of perlbug 1.36 running under perl 5.10.0.

-----------------------------------------------------------------
[Please enter your report here]

This emits a warning​:

# perl -e 'use warnings; stat "/xyz"; stat _'
stat() on unopened filehandle _ at -e line 1.

however, the warning is wrong - stat _ should work exactly like the
previous stat, which does not emit a warning.

perldoc -f stat says that stat sets up the information associated
with the special filehandle "_" *if successful*. (This however doesn't
mean "stat _" repeats the last succesful stat).

Assuming "/xyz" doesn't exist on your system, I think the warning is
appropriate; "stat _" is mostly useful to avoid getting statistics
of a file twice. If someone uses "stat _" while the file isn't there,
it's likely something unexpected has happened.

Abigail

@p5pRT
Copy link
Author

p5pRT commented Dec 3, 2009

The RT System itself - Status changed from 'new' to 'open'

@p5pRT
Copy link
Author

p5pRT commented Mar 22, 2010

From schmorp@schmorp.de

On Thu, Dec 03, 2009 at 02​:31​:04PM +0100, Abigail <abigail@​abigail.be> wrote​:

perldoc -f stat says that stat sets up the information associated
with the special filehandle "_" *if successful*. (This however doesn't
mean "stat _" repeats the last succesful stat).

Yes, but not the result of stat. The docs say​:

  If "stat" is passed the special filehandle consisting of an
  underline, no stat is done, but the current contents of the
  stat structure from the last "stat", "lstat", or filetest
  are returned.

The current contents are empty.

Assuming "/xyz" doesn't exist on your system, I think the warning is
appropriate; "stat _" is mostly useful to avoid getting statistics

Well, it obviously happens even if the file is there (/etc exists on my
system), so the point is moot​:

  # perl -e 'use warnings; stat "/etc"; stat "/xyz"; stat _'
  stat() on unopened filehandle _ at -e line 1.

Note that if implemented the way you claim it should be, then it would not
output a warning after the first successful stat call in a program. I'd
hardly call that a useful diagnostics.

This bug is the reason why common​::sense cannot enable the "unopened"
warning btw.

of a file twice. If someone uses "stat _" while the file isn't there,
it's likely something unexpected has happened.

Well, the code is written to return the same thing as the last stat call,
and the documentation is at worst ambiguous (stat structure contents is
not the same as being successful/unsuccessful).

--
  The choice of a Deliantra, the free code+content MORPG
  -----==- _GNU_ http​://www.deliantra.net
  ----==-- _ generation
  ---==---(_)__ __ ____ __ Marc Lehmann
  --==---/ / _ \/ // /\ \/ / schmorp@​schmorp.de
  -=====/_/_//_/\_,_/ /_/\_\

@p5pRT
Copy link
Author

p5pRT commented Jan 20, 2012

From @cpansprout

Fixed in commit daa30a6.

@p5pRT
Copy link
Author

p5pRT commented Jan 20, 2012

@cpansprout - Status changed from 'open' to 'resolved'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant