Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw

RE: undefs and functions

by perlmonkey (Hermit)
on Aug 02, 2000 at 05:24 UTC ( #25646=note: print w/replies, xml ) Need Help??

in reply to undefs and functions

I dont think there is an 'elegant' way to test each hash key in a nested hash. You could always come up with some funky loop and run exists on for each level. (my opinion would be that Russ's code is not 'elegant', however it is a solution, but there are probably dozens of solutions.)

Given that, why do you even want to test each key value? Perl should not really care if it exists or not. Are you trying to prevent warnings that might be occuring, or do you not want the hash keys to be autovivified? The answer to this might help guide us in the right direction. But if you dont care about autovivification or 'Use of uninitialized value in ...' warnings I would say to not worry about the tests. They will only slow things down.

Replies are listed 'Best First'.
RE: RE: undefs and functions
by dlux (Initiate) on Aug 02, 2000 at 12:13 UTC
    I got error, not a simple warning, and that's the problem... "Cannot use an undefined value as a hash reference..."
      I maybe barking up the wrong tree, but I think I got your error. It took a bit of rooting around. Normally if the scalar is just a normal hash it should autovivify. Here is an autovivification example:
      my $foo = { }; $foo->{a}->{b}->{c}->{d} = 1; use Data::Dumper; print Data::Dumper->Dump([$foo],['foo']);
      $foo = { 'a' => { 'b' => { 'c' => { 'd' => 1 } } } };
      All those keys were undef, but now they were created just by asking for them.

      I got your error only when I tried to turn an undef into a hash reference explicitly:print %{$foo->{a}->{d}}
      So maybe making it into a two step process:
      my $bar = $foo->{a}->{d}; print %$bar if $bar;
      that might take care of your errors. If I totally missed your problem, sorry.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://25646]
and !@monks...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (3)
As of 2017-02-23 08:30 GMT
Find Nodes?
    Voting Booth?
    Before electricity was invented, what was the Electric Eel called?

    Results (341 votes). Check out past polls.