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

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.

Replies are listed 'Best First'.
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?

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

How do I use this? | Other CB clients
Other Users?
Others musing on the Monastery: (7)
As of 2019-12-06 18:34 GMT
Find Nodes?
    Voting Booth?
    Strict and warnings: which comes first?

    Results (157 votes). Check out past polls.