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

local $! = $!; does not work as expected, does not restore #15092

Open
p5pRT opened this issue Dec 15, 2015 · 4 comments
Open

local $! = $!; does not work as expected, does not restore #15092

p5pRT opened this issue Dec 15, 2015 · 4 comments

Comments

@p5pRT
Copy link

p5pRT commented Dec 15, 2015

Migrated from rt.perl.org#126928 (status was 'open')

Searchable as RT126928$

@p5pRT
Copy link
Author

p5pRT commented Dec 15, 2015

From @exodist

Created by @exodist

This is a bug report for perl from exodist7@​gmail.com,
generated with the help of perlbug 1.40 running under perl 5.22.0.

-----------------------------------------------------------------

local $! = $! will set $! to 0, and will not restore it at the end of the
scope.

Sample code​:

  $! = 100;
  print '$! == ' . int($!) . "\n";
  {
  local $! = $!;
  print '$! == ' . int($!) . "\n";
  }
  print '$! == ' . int($!) . "\n";

Output​:

  $! == 100
  $! == 0
  $! == 0

You can work around the issue by replacing 'local $! = $!' with 'local $! =
int($!)' or with 'my $x = $!; local $! = $x;'. Using 'local $!' without
assinging a value to it also works as expected in that it restores the old
value at the end of the scope.

I am not sure if this is truly a bug, but it is certainly unexpected.

Perl Info

Flags:
    category=core
    severity=medium

Site configuration information for perl 5.22.0:

Configured by exodist at Wed Jul 29 11:56:27 PDT 2015.

Summary of my perl5 (revision 5 version 22 subversion 0) configuration:

  Platform:
    osname=linux, osvers=3.13.0-44-generic,
archname=x86_64-linux-thread-multi
    uname='linux work 3.13.0-44-generic #73-ubuntu smp tue dec 16 00:22:43
utc 2014 x86_64 x86_64 x86_64 gnulinux '
    config_args='-de -Dprefix=/home/exodist/perl5/perlbrew/perls/main
-Dusethreads -Aeval:scriptdir=/home/exodist/perl5/perlbrew/perls/main/bin'
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=define, usemultiplicity=define
    use64bitint=define, use64bitall=define, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -fwrapv
-fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
    optimize='-O2',
    cppflags='-D_REENTRANT -D_GNU_SOURCE -fwrapv -fno-strict-aliasing -pipe
-fstack-protector -I/usr/local/include'
    ccversion='', gccversion='4.8.4', gccosandvers=''
    intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678,
doublekind=3
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16,
longdblkind=3
    ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -fstack-protector -L/usr/local/lib'
    libpth=/usr/local/lib /usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed
/usr/include/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu /lib/../lib
/usr/lib/x86_64-linux-gnu /usr/lib/../lib /lib
    libs=-lpthread -lnsl -ldl -lm -lcrypt -lutil -lc
    perllibs=-lpthread -lnsl -ldl -lm -lcrypt -lutil -lc
    libc=, so=so, useshrplib=false, libperl=libperl.a
    gnulibc_version='2.19'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
    cccdlflags='-fPIC', lddlflags='-shared -O2 -L/usr/local/lib
-fstack-protector'



@INC for perl 5.22.0:
    /home/exodist/.perlbrew/libs/main@exodist
/lib/perl5/x86_64-linux-thread-multi
    /home/exodist/.perlbrew/libs/main@exodist/lib/perl5

/home/exodist/perl5/perlbrew/perls/main/lib/site_perl/5.22.0/x86_64-linux-thread-multi
    /home/exodist/perl5/perlbrew/perls/main/lib/site_perl/5.22.0

/home/exodist/perl5/perlbrew/perls/main/lib/5.22.0/x86_64-linux-thread-multi
    /home/exodist/perl5/perlbrew/perls/main/lib/5.22.0
    .


Environment for perl 5.22.0:
    HOME=/home/exodist
    LANG=en_US.UTF-8
    LANGUAGE=en_US
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/home/exodist/.perlbrew/libs/main@exodist
/bin:/home/exodist/perl5/perlbrew/bin:/home/exodist/perl5/perlbrew/perls/main/bin:/home/exodist/bin:/home/exodist/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
    PERL5LIB=/home/exodist/.perlbrew/libs/main@exodist/lib/perl5
    PERLBREW_BASHRC_VERSION=0.66
    PERLBREW_HOME=/home/exodist/.perlbrew
    PERLBREW_LIB=exodist
    PERLBREW_MANPATH=/home/exodist/.perlbrew/libs/main@exodist
/man:/home/exodist/perl5/perlbrew/perls/main/man
    PERLBREW_PATH=/home/exodist/.perlbrew/libs/main@exodist
/bin:/home/exodist/perl5/perlbrew/bin:/home/exodist/perl5/perlbrew/perls/main/bin
    PERLBREW_PERL=main
    PERLBREW_ROOT=/home/exodist/perl5/perlbrew
    PERLBREW_VERSION=0.66
    PERL_BADLANG (unset)
    PERL_LOCAL_LIB_ROOT=/home/exodist/.perlbrew/libs/main@exodist
    PERL_MB_OPT=--install_base /home/exodist/.perlbrew/libs/main@exodist
    PERL_MM_OPT=INSTALL_BASE=/home/exodist/.perlbrew/libs/main@exodist
    SHELL=/usr/bin/zsh

@p5pRT
Copy link
Author

p5pRT commented Dec 15, 2015

From zefram@fysh.org

Chad Granum wrote​:

local $! = $! will set $! to 0, and will not restore it at the end of the
scope.

This duplicates part of [perl #119683].

-zefram

@p5pRT
Copy link
Author

p5pRT commented Dec 15, 2015

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

@mauke
Copy link
Contributor

mauke commented Oct 27, 2023

I think this is a duplicate of #5835.

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

4 participants