develooper Front page | perl.perl5.porters | Postings from July 2001

[ID 20010720.006] each() fails when passed a subroutine thatreturns a hashref

From:
Dennis Moore
Date:
July 20, 2001 11:10
Subject:
[ID 20010720.006] each() fails when passed a subroutine thatreturns a hashref
Message ID:
200107201809.f6KI9bk45279@forbidden.dough.net
This is a bug report for perl from archon@forbidden.dough.net,
generated with the help of perlbug 1.26 running under perl 5.00503.


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

When each() is passed a subroutine that returns a reference to a hash, it
causes an infinite loop.  Tested on 5.00503 and 5.6.1.

sub makeref {
	my $foo = {
		bar => [1, 2, 3],
		blah => [qw/a b c/],
	};
	return $foo;
}

# Output:
# bar - 1 2 3
# blah - a b c

my $blah = makeref();
while (my ($k, $v) = each %$blah) {
	print "$k - @$v\n";
}

# Output (infinite loop):
# bar - 1 2 3
# bar - 1 2 3
# bar - 1 2 3
# ...

while (my ($k, $v) = each %{makeref()}) {
	print "$k - @$v\n";
}

[Please do not change anything below this line]
-----------------------------------------------------------------

---
Site configuration information for perl 5.00503:

Configured by markm at Sun Mar  5 13:39:27 SAST 2000.

Summary of my perl5 (5.0 patchlevel 5 subversion 3) configuration:
  Platform:
    osname=freebsd, osvers=4.0-current, archname=i386-freebsd
    uname='FreeBSD freefall.FreeBSD.org 4.0-current FreeBSD 4.0-current #0: $Date$'
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=undef useperlio=undef d_sfio=undef
  Compiler:
    cc='cc', optimize='undef', gccversion=2.95.2 19991024 (release)
    cppflags=''
    ccflags =''
    stdchar='char', d_stdstdio=undef, usevfork=true
    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 ='-Wl,-E -lperl -lm '
    libpth=/usr/lib
    libs=-lm -lc -lcrypt
    libc=, so=so, useshrplib=true, libperl=libperl.so.3
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags=' -Wl,-R/usr/lib'
    cccdlflags='-DPIC -fpic', lddlflags='-Wl,-E -shared -lperl -lm '

Locally applied patches:
    

---
@INC for perl 5.00503:
    /usr/libdata/perl/5.00503/mach
    /usr/libdata/perl/5.00503
    /usr/local/lib/perl5/site_perl/5.005/i386-freebsd
    /usr/local/lib/perl5/site_perl/5.005
    .

---
Environment for perl 5.00503:
    HOME=/home/archon
    LANG (unset)
    LANGUAGE (unset)
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/home/archon/bin:/usr/bin:/bin:/usr/local/bin:/usr/X11R6/bin:/sbin:/usr/sbin:/usr/local/sbin
    PERL_BADLANG (unset)
    SHELL=/usr/local/bin/zsh




nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About