adler@astride..caltech.edu (B. Thomas Adler) (09/28/90)
So I was working on this perl script today, when I noticed that everytime I restarted my program, my dbm arrays were coming up empty. A "strings" on the dbm file showed the data to be there, so I concocted a test program to find out what was going on. This is what I came up with--- --------------------------- #!/usr/bin/perl #dbmopen (TEST, "test", 0600); #$TEST{"mine"} = "abcdef"; #$TEST{5} = 53; #dbmclose(TEST); dbmopen (TEST, "test", 0600)|| print "Failed 1\n"; $TEST{"mine"} = $TEST{"mine"}; # Line no 8. print "TEST = $TEST{mine}\n"; print "KEYS = ", keys(%TEST), "\n"; print "VALUES = ", values(%TEST), "\n"; printf ("TEST = %s\n", $TEST{'mine'}); printf ("TEST = %s\n", $TEST{5}); while (($key, $value) = each %TEST) { print "$key == $value\n"; } dbmclose(TEST) || print "Failed 2\n"; ---------------------------- What I find wierd is that I use the (now) commented lines to setup my assoc array. At this point, all the following print statements print the correct thing. I then commented those lines (and didn't have line no 8.), and suddenly everything was printing blanks, except values from "each", which were correct. I accidentally stumbled onto line 8, at which point every functioned perfectly. Why? Is there something special you have to do to start accessing the dbm file? The first line I tried (in place of line 8) was "undef $TEST{''};", but that ended up defining $TEST{''} to null. (It made everything else work too.) Anybody care to enlighten me? -Bo Adler -- B. Thomas Adler <adler@tybalt.caltech.edu> <adler@citjulie.bitnet> <...!ames!elroy!cit-vax!adler>