Beefy Boxes and Bandwidth Generously Provided by pair Networks Bob
Think about Loose Coupling
 
PerlMonks  

Re: Autovivification with hash of hashes

by Aristotle (Chancellor)
on Jan 26, 2003 at 01:01 UTC ( #229912=note: print w/ replies, xml ) Need Help??


in reply to Autovivification with hash of hashes

Yes you did do something with it. In order to check whether exists $foo{bar}{baz}, obviously, $foo{bar} must be a hash reference. Perl DWIMs (most of the time) by creating an empty hashref on multilevel lookup attempts, but sometimes, like in your case, that is undesired. What you have to do is clunky: check every level of the hierarchy yourself. Something like

my $cursor = \%foo; for(qw(foo bar)) { undef $cursor, last unless exists $cursor->{$_}; $cursor = $cursor->{$_}; } print "exists\n" if $cursor;
You want to put this in a function like
sub exists_novivify { my $cursor = shift; for(@_) { undef $cursor, last unless exists $cursor->{$_}; $cursor = $cursor->{$_}; } $cursor; } print "exists\n" if exists_novivify \%foo, qw(bar baz);
Update: removed duplicate exists. Thanks BrowserUk.

Makeshifts last the longest.


Comment on Re: Autovivification with hash of hashes
Select or Download Code
Re: Re: Autovivification with hash of hashes
by Mr_Person (Hermit) on Jan 26, 2003 at 01:50 UTC
    Thanks! That sorta makes sense, although it's still annoying. I guess that's the price you pay for Perl's flexibility.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://229912]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (12)
As of 2014-04-21 14:55 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (495 votes), past polls