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

returning @+ out of scope loses its value #7192

Closed
p5pRT opened this issue Mar 22, 2004 · 4 comments
Closed

returning @+ out of scope loses its value #7192

p5pRT opened this issue Mar 22, 2004 · 4 comments

Comments

@p5pRT
Copy link

p5pRT commented Mar 22, 2004

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

Searchable as RT27839$

@p5pRT
Copy link
Author

p5pRT commented Mar 22, 2004

From perl-5.8.0@ton.iguana.be

Created by perl-5.8.0@ton.iguana.be

This was already mentioned on the mailinglist, see
http​://groups.google.com/groups?selm=c26p20$34b$1%40post.home.lunix
In that thread you will also find a possible patch, where it was
unclear if that was the proper place to fix.
I'm re-reporting the bug here so it won't get lost.

perl -wle 'sub f {"ab" =~ /(.)/; print "@​+"; return @​+}; print f'
1 1
Use of uninitialized value in print at -e line 1.
Use of uninitialized value in print at -e line 1.

Ok, I can sort of see what's going on here. the scope with the regex
is left, and @​+ gets restored to it's old value (empty). So my result
still knows it was 2 long, but the values are gone, and I get 2 undefs.

But why didn't I get copies of the values, no longer sensitive to
their origin evaporating ?
(later discussion in the thread shows agreement that it should have)

If I try to sort of do this (as much as possible) with a normal array,
I don't observe the effect​:

perl -wle 'sub DESTROY { $a[0]=1} @​a="a".."c"; sub f { my $a=bless[]; return @​a } print f'
abc

(I was sort of starting to expect 1bc here)

Also notice that things like this DO work, even though $1 is also going
out of scope​:
perl -wle 'sub f {"ab" =~ /(.)/; print "$1"; return $1}; print f'
a
a

Perl Info

Flags:
    category=core
    severity=low

Site configuration information for perl v5.8.2:

Configured by ton at Sun Jan  4 19:19:06 CET 2004.

Summary of my perl5 (revision 5.0 version 8 subversion 2) configuration:
  Platform:
    osname=linux, osvers=2.6.0, archname=i686-linux-64int-ld
    uname='linux quasar 2.6.0 #3 thu dec 18 18:22:48 cet 2003 i686 gnulinux '
    config_args=''
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=undef use5005threads=undef useithreads=undef usemultiplicity=undef
    useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
    use64bitint=define use64bitall=undef uselongdouble=define
    usemymalloc=y, bincompat5005=undef
  Compiler:
    cc='cc', ccflags ='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
    optimize='-O2 -fomit-frame-pointer',
    cppflags='-fno-strict-aliasing -I/usr/local/include'
    ccversion='', gccversion='3.4.0 20031231 (experimental)', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=12345678
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    ivtype='long long', ivsize=8, nvtype='long double', nvsize=12, Off_t='off_t', lseeksize=8
    alignbytes=4, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib
    libs=-lnsl -ldb -ldl -lm -lcrypt -lutil -lc
    perllibs=-lnsl -ldl -lm -lcrypt -lutil -lc
    libc=/lib/libc-2.3.2.so, so=so, useshrplib=false, libperl=libperl.a
    gnulibc_version='2.3.2'
  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.8.2:
    /usr/lib/perl5/5.8.2/i686-linux-64int-ld
    /usr/lib/perl5/5.8.2
    /usr/lib/perl5/site_perl/5.8.2/i686-linux-64int-ld
    /usr/lib/perl5/site_perl/5.8.2
    /usr/lib/perl5/site_perl
    .


Environment for perl v5.8.2:
    HOME=/home/ton
    LANG (unset)
    LANGUAGE (unset)
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/home/ton/bin.Linux:/home/ton/bin:/home/ton/bin.SampleSetup:/usr/local/bin:/usr/local/sbin:/usr/local/jre/bin:/home/oracle/product/9.0.1/bin:/usr/local/ar/bin:/usr/games/bin:/usr/X11R6/bin:/usr/share/bin:/usr/bin:/usr/sbin:/bin:/sbin:.
    PERL_BADLANG (unset)
    SHELL=/bin/bash

@p5pRT
Copy link
Author

p5pRT commented Mar 23, 2004

From @rgs

Perl-5.8.0@​Ton.Iguana.Be wrote in perl.perl5.porters :

This was already mentioned on the mailinglist, see
http​://groups.google.com/groups?selm=c26p20$34b$1%40post.home.lunix
In that thread you will also find a possible patch, where it was
unclear if that was the proper place to fix.
I'm re-reporting the bug here so it won't get lost.

perl -wle 'sub f {"ab" =~ /(.)/; print "@​+"; return @​+}; print f'
1 1
Use of uninitialized value in print at -e line 1.
Use of uninitialized value in print at -e line 1.

I committed Hugo's proposed fix for this, along with a test case,
as change #22564.

@p5pRT
Copy link
Author

p5pRT commented Mar 23, 2004

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

@p5pRT
Copy link
Author

p5pRT commented Mar 23, 2004

@rgs - 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