Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW

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 taking refuge in the Monastery: (5)
As of 2020-09-20 04:52 GMT
Find Nodes?
    Voting Booth?
    If at first I donít succeed, I Ö

    Results (118 votes). Check out past polls.