[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]
[perl #37711] undefined hashref error reported on wrong line
# New Ticket Created by David Hillman
# Please include the string: [perl #37711]
# in the subject line of all future correspondence about this issue.
# <URL: https://rt.perl.org/rt3/Ticket/Display.html?id=37711 >
This is a bug report for perl from david.hillman@livetext.com,
generated with the help of perlbug 1.35 running under perl v5.8.6.
-----------------------------------------------------------------
The following script demonstrates the problem, which has been
replicated on the platforms listed in the POD.
When a hashref being used as a 'while condition' runs out, the
resulting undefined error is reported from the last
line of the loop, instead of the first.
#!/usr/bin/perl
use strict; # error is not thrown unless strict is used
if (not $ARGV[0] or $ARGV[0] =~ 'bad_error') {
bad_error();
} else {
good_error();
}
sub good_error {
my %hash;
my $hash_ref = { name => 'value' };
while ( 1 )
{
%hash = %{ $hash_ref }; # error correctly reported on this line
last unless %hash;
print "in good_error\n";
$hash_ref = undef;
}
}
sub bad_error {
my %hash;
my $hash_ref = { name => 'value' };
while ( %hash = %{ $hash_ref } ) # error occurs here
{
print "in bad_error\n";
$hash_ref = undef;
1; # error reported on this line
}
}
=pod
=head1 Undefined Hashref at Wrong Line Number
Script dies with this error message:
Can't use an undefined value as a HASH reference at ./
undefined_hashref_line_num line 31.
The error message should read:
Can't use an undefined value as a HASH reference at ./
undefined_hashref_line_num line 16.
The actual error message reports the line number of the last
statement of the loop instead of the assignment in the while().
The error only occurs when the strict pragma is in use.
Discovered when doing a this with DBI:
while( %results = %{ $dbh->fetrow_hashref() } ) {
# Do some stuff with %results
some statement (error was reported on this line
when the statement handle returned undef)
}
However, the script above proves that this issue is not DBI related.
=head1 Script Usage
undefined_hashref_line_num.pl --good-error|--bad-error
Option --good-error dies with a diagnostic message and correct line
number.
Option --bad-error dies with a diagnostic message and incorrect line
number.
=head1 Reproduced On
=over
=item *
Mac OS X 10.3 with the default Perl 5.8.1
=item *
Mac OS X 10.4.* with 5.8.1, 5.8.6, 5.8.7, and 5.9.2
=item *
FreeBSD 4.8 with 5.8.3
=back
=cut
-----------------------------------------------------------------
---
Flags:
category=core
severity=low
---
Site configuration information for perl v5.8.6:
Configured by root at Sun Mar 20 16:31:42 PST 2005.
Summary of my perl5 (revision 5 version 8 subversion 6) configuration:
Platform:
osname=darwin, osvers=8.0, archname=darwin-thread-multi-2level
uname='darwin b28.apple.com 8.0 darwin kernel version 7.5.0: thu
mar 3 18:48:46 pst 2005; root:xnuxnu-517.99.13.obj~1release_ppc power
macintosh powerpc '
config_args='-ds -e -Dprefix=/usr -Dccflags=-g -pipe -
Dldflags=-Dman3ext=3pm -Duseithreads -Duseshrplib'
hint=recommended, useposix=true, d_sigaction=define
usethreads=define use5005threads=undef useithreads=define
usemultiplicity=define
useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
use64bitint=undef use64bitall=undef uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler:
cc='cc', ccflags ='-g -pipe -fno-common -DPERL_DARWIN -no-cpp-
precomp -fno-strict-aliasing -I/usr/local/include',
optimize='-Os',
cppflags='-no-cpp-precomp -g -pipe -fno-common -DPERL_DARWIN -no-
cpp-precomp -fno-strict-aliasing -I/usr/local/include'
ccversion='', gccversion='3.3 20030304 (Apple Computer, Inc.
build 1809)', gccosandvers=''
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=4321
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=8
ivtype='long', ivsize=4, nvtype='double', nvsize=8,
Off_t='off_t', lseeksize=8
alignbytes=8, prototype=define
Linker and Libraries:
ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc', ldflags ='-L/usr/
local/lib'
libpth=/usr/local/lib /usr/lib
libs=-ldbm -ldl -lm -lc
perllibs=-ldl -lm -lc
libc=/usr/lib/libc.dylib, so=dylib, useshrplib=true,
libperl=libperl.dylib
gnulibc_version=''
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' '
cccdlflags=' ', lddlflags='-bundle -undefined dynamic_lookup -L/
usr/local/lib'
Locally applied patches:
23953 - fix for File::Path::rmtree CAN-2004-0452 security issue
33990 - fix for setuid perl security issues
---
@INC for perl v5.8.6:
/Applications/livetext/branches/misk5.cms/conf/test
/Applications/livetext/branches/misk5.cms/mod
/System/Library/Perl/5.8.6/darwin-thread-multi-2level
/System/Library/Perl/5.8.6
/Library/Perl/5.8.6/darwin-thread-multi-2level
/Library/Perl/5.8.6
/Library/Perl
/Network/Library/Perl/5.8.6/darwin-thread-multi-2level
/Network/Library/Perl/5.8.6
/Network/Library/Perl
/System/Library/Perl/Extras/5.8.6/darwin-thread-multi-2level
/System/Library/Perl/Extras/5.8.6
/Library/Perl/5.8.1
.
---
Environment for perl v5.8.6:
DYLD_LIBRARY_PATH (unset)
HOME=/Users/hillman
LANG (unset)
LANGUAGE (unset)
LD_LIBRARY_PATH (unset)
LOGDIR (unset)
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/Users/hillman/
bin:/usr/local/mysql/bin
PERL5LIB=/Applications/livetext/branches/misk5.cms/conf/test:/
Applications/livetext/branches/misk5.cms/mod
PERL_BADLANG (unset)
SHELL=/bin/bash
--
David Hillman
LiveText, Inc
1.866.LiveText x235
- Follow-Ups from:
-
SADAHIRO Tomoyuki <bqw10602@nifty.com>
Dave Mitchell <davem@iabyn.com>
[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]