Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

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']);
      Results:
      $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?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://25646]
help
Chatterbox?
[holli]: I got into a fight yesterday and won.
[holli]: No, that's not true. I started it.
[holli]: I was company to my mother, bringing her to the therapy she has to take. There was another so called therapist outside smoking. We engaged in a talk with her and he turned out to be one of these lunatics telling people when they are sick it's their own
[holli]: fault for not thinking positively enough.
[LanX]: did he seriously hurt his fist at your nose in the end?
LanX .oO(positively thought)
[holli]: :) No. I might be small, but you don't want to be around me when I flip.
[LanX]: I can imagine ...
LanX hurts to be bitten between the legs ;-)

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (6)
As of 2017-12-13 17:57 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    What programming language do you hate the most?




















    Results (373 votes). Check out past polls.

    Notices?