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

File-scope 'my' array is non-empty, but debugger says it's empty #1097

Closed
p5pRT opened this issue Jan 27, 2000 · 4 comments
Closed

File-scope 'my' array is non-empty, but debugger says it's empty #1097

p5pRT opened this issue Jan 27, 2000 · 4 comments

Comments

@p5pRT
Copy link

p5pRT commented Jan 27, 2000

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

Searchable as RT2051$

@p5pRT
Copy link
Author

p5pRT commented Jan 27, 2000

From rmiller@rmiller1.idx.com

The following two-line file illustrates the problem​:

  my @​res = ("A\n");
  print @​res;

Running this with "perl -w" or "perl -w -d" produces the expected output
(a line containing the single letter 'A'). But in the perl debugger,
the command
  x @​res
given after the first line executes, but before the second start,
erroneously reports
  empty array

Perl Info


Site configuration information for perl 5.00503:

Configured by root at Mon Aug 30 23:08:56 EDT 1999.

Summary of my perl5 (5.0 patchlevel 5 subversion 3) configuration:
  Platform:
    osname=linux, osvers=2.2.5-22smp, archname=i386-linux
    uname='linux porky.devel.redhat.com 2.2.5-22smp #1 smp wed jun 2 09:11:51 edt 1999 i686 unknown '
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=undef useperlio=undef d_sfio=undef
  Compiler:
    cc='cc', optimize='-O2', gccversion=egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)
    cppflags='-Dbool=char -DHAS_BOOL -I/usr/local/include'
    ccflags ='-Dbool=char -DHAS_BOOL -I/usr/local/include'
    stdchar='char', d_stdstdio=undef, usevfork=false
    intsize=4, longsize=4, ptrsize=4, doublesize=8
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    alignbytes=4, usemymalloc=n, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib
    libs=-lnsl -ldl -lm -lc -lposix -lcrypt
    libc=, 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 5.00503:
    /usr/local/bin/perl
    /home/rmiller/rel/pmake
    /usr/lib/perl5/5.00503/i386-linux
    /usr/lib/perl5/5.00503
    /usr/lib/perl5/site_perl/5.005/i386-linux
    /usr/lib/perl5/site_perl/5.005
    .


Environment for perl 5.00503:
    HOME=/home/rmiller
    LANG=en_US
    LANGUAGE (unset)
    LC_ALL=en_US
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/rmiller/bin:.
    PERL5LIB=/usr/local/bin/perl:/home/rmiller/rel/pmake
    PERL_BADLANG (unset)
    SHELL=/bin/bash

@p5pRT
Copy link
Author

p5pRT commented Jan 27, 2000

From [Unknown Contact. See original ticket]

Rich Miller writes​:

my @​res = \("A\\n"\);
print @​res;

Running this with "perl -w" or "perl -w -d" produces the expected output
(a line containing the single letter 'A'). But in the perl debugger,
the command
x @​res
given after the first line executes, but before the second start,
erroneously reports
empty array

More datapoints​:

  DB<1> print @​res

  DB<2> eval 'print @​res'
A

Something fishy... eval '...' does not see it, but eval q(eval '...') can
see it...

Ilya

@p5pRT
Copy link
Author

p5pRT commented Jan 27, 2000

From @tamias

On Thu, Jan 27, 2000 at 06​:31​:01PM -0500, Ilya Zakharevich wrote​:

Rich Miller writes​:

my @&#8203;res = \("A\\n"\);
print @&#8203;res;

Running this with "perl -w" or "perl -w -d" produces the expected output
(a line containing the single letter 'A'). But in the perl debugger,
the command
x @​res
given after the first line executes, but before the second start,
erroneously reports
empty array

More datapoints​:

DB<1> print @​res

DB<2> eval 'print @​res'
A

Something fishy... eval '...' does not see it, but eval q(eval '...') can
see it...

This is probably the problem​:

[...]/lib/perl5/5.00503> grep \@​res perl5db.pl
  my @​res;
  @​res = eval "$usercontext $evalarg;\n"; # '\n' for nice recursive
  debug
  dumpit($OUT, \@​res);
  @​res;

Ronald

@p5pRT
Copy link
Author

p5pRT commented Jan 27, 2000

From [Unknown Contact. See original ticket]

On Thu, Jan 27, 2000 at 06​:37​:49PM -0500, Ronald J Kimball wrote​:

DB<1> print @​res

DB<2> eval 'print @​res'
A

Something fishy... eval '...' does not see it, but eval q(eval '...') can
see it...

This is probably the problem​:

[...]/lib/perl5/5.00503> grep \@​res perl5db.pl
my @​res;
@​res = eval "$usercontext $evalarg;\n"; # '\n' for nice recursive
debug
dumpit($OUT, \@​res);
@​res;

Thanks!!! I was going to go mad...

Inline Patch
--- ./lib/perl5db.pl~	Tue Nov 30 22:47:10 1999
+++ ./lib/perl5db.pl	Thu Jan 27 18:55:55 2000
@@ -1254,11 +1254,11 @@ sub save {
 # The following takes its argument via $evalarg to preserve current @_
 
 sub eval {
-    my @res;
+    local @res;			# 'my' would make it visible from user code
     {
-	my $otrace = $trace;
-	my $osingle = $single;
-	my $od = $^D;
+	local $otrace = $trace;
+	local $osingle = $single;
+	local $od = $^D;
 	@res = eval "$usercontext $evalarg;\n"; # '\n' for nice recursive debug
 	$trace = $otrace;
 	$single = $osingle;

Enjoy,
Ilya

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