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

Use of uninialised variable on tied hashed, but not untied hashes. #1880

Closed
p5pRT opened this issue Apr 24, 2000 · 5 comments
Closed

Use of uninialised variable on tied hashed, but not untied hashes. #1880

p5pRT opened this issue Apr 24, 2000 · 5 comments

Comments

@p5pRT
Copy link

p5pRT commented Apr 24, 2000

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

Searchable as RT3148$

@p5pRT
Copy link
Author

p5pRT commented Apr 24, 2000

From mike@fysh.org

This is a bug report for perl from mike@​fysh.org,
generated with the help of perlbug 1.26 running under perl 5.00503.


The following code does not generate a warning​:

#!/usr/bin/perl -w

$cheese{"cake"}=undef;

However, the following code does​:

#!/usr/bin/perl -w

use DB_File;

tie %cheese, 'DB_File', "fred";

$cheese{"cake"}=undef;

I get a "Use of uninitalized variable" warning, which is a shame, because it
makes -w unusable in my particular case (I'm creating millions of undefined
hash elements). The 'exists' versus 'defined' functionality appears to be
working correctly; it's the superfluous warning that causes me a problem.

Cheers,
Mike.



Site configuration information for perl 5.00503​:

Configured by torin at Mon Mar 27 07​:50​:39 PST 2000.

Summary of my perl5 (5.0 patchlevel 5 subversion 3) configuration​:
  Platform​:
  osname=linux, osvers=2.2.14, archname=i386-linux
  uname='linux perv 2.2.14 #1 sat jan 15 20​:48​:59 pst 2000 i686 unknown '
  hint=recommended, useposix=true, d_sigaction=define
  usethreads=undef useperlio=undef d_sfio=undef
  Compiler​:
  cc='cc', optimize='-O2 ', gccversion=2.95.2 20000220 (Debian GNU/Linux)
  cppflags='-Dbool=char -DHAS_BOOL -D_REENTRANT -DDEBIAN -I/usr/local/include'
  ccflags ='-Dbool=char -DHAS_BOOL -D_REENTRANT -DDEBIAN -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 -lndbm -lgdbm -ldbm -ldb -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/lib/perl5/5.005/i386-linux
  /usr/lib/perl5/5.005
  /usr/local/lib/site_perl/i386-linux
  /usr/local/lib/site_perl
  /usr/lib/perl5
  .


Environment for perl 5.00503​:
  HOME=/home/mike
  LANG (unset)
  LANGUAGE (unset)
  LD_LIBRARY_PATH (unset)
  LOGDIR (unset)
  PATH=/home/mike/bin/​:/usr/local/bin​:/usr/bin/​:/bin/​:/usr/bin/X11​:/usr/openwin/bin/xview​:/usr/openwin/bin​:/usr/ucb​:/usr/etc​:/usr/local/bin​:/diskB/local/tran/bin​:/usr/local/java/bin/​:/usr/local/lib/xemacs/site-lisp/tm/methods​:/usr/local/teTeX/bin​:/usr/local/netpbm-bin/bin​:/usr/lib/teTeX/bin
  PERL_BADLANG (unset)
  SHELL=/usr/bin/zsh

@p5pRT
Copy link
Author

p5pRT commented Apr 24, 2000

From [Unknown Contact. See original ticket]

Mike Ashton <mike@​fysh.org> wrote

use DB_File;

tie %cheese, 'DB_File', "fred";

$cheese{"cake"}=undef;

That doesn't work. DB_File only supports strings as hash values, not
undef or references or ... . This reflects a limitation of the
underlying Berkeley DB.

I get a "Use of uninitalized variable" warning, which is a shame, because it
makes -w unusable in my particular case (I'm creating millions of undefined
hash elements).

To avoid the warning, write instead

  $cheese{"cake"}='';

If you really need to distinguish between undef and '', you're out of
luck. You'll need to redesign your data representation.

Mike Guy

@p5pRT
Copy link
Author

p5pRT commented Apr 30, 2000

From [Unknown Contact. See original ticket]

#!/usr/bin/perl -w
use DB_File;
tie %cheese, 'DB_File', "fred";
$cheese{"cake"}=undef;

I get a "Use of uninitalized variable" warning, ...

Just how do you expect DB_File to store undef in a file?

For both in-memory and on-disk hashes, a give key will exist or not exist.
For in-memory hashes, the value can be the null string, a non-null string,
or undef. For on-disk hashes, the value can be null or non-null.

The docs for DB_File say nothing about the ability to store a value of
undef (as opposed to "" which is a defined() value). My guess is that the
warnings you are seeing are the result of DB_File converting the value of
undef to "" when the key & value are stored on disk.
  -Joe

@p5pRT
Copy link
Author

p5pRT commented Jan 21, 2003

From @ask

Not a bug.

--
ask bjoern hansen, http​://askbjoernhansen.com/ !try; do();
Develooper LLC, http​://develooper.com/ $stuff->better;

@p5pRT
Copy link
Author

p5pRT commented Jan 21, 2003

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