Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

Re^5: initialize all values in a hash

by DrHyde (Prior)
on May 18, 2012 at 15:35 UTC ( #971331=note: print w/ replies, xml ) Need Help??


in reply to Re^4: initialize all values in a hash
in thread initialize all values in a hash

I mostly use Tie::Hash::Vivify to prevent autovivification thus:

my $hashref = Tie::Hash::Vivify->new( sub { confess("No auto-vivifying!\n".Dumper(\@_)) } )
to avoid those annoyingly hard-to-track-down bugs where you've typoed a hash key.


Comment on Re^5: initialize all values in a hash
Download Code
Replies are listed 'Best First'.
Re^6: initialize all values in a hash
by tobyink (Abbot) on May 18, 2012 at 16:49 UTC

    The autovivification module is pretty good for this kind of thing. Offers you the ability to simply switch off autovivification, warn about it, or croak. Rather than being tied to a particular hash, it's lexically scoped. And it's context-sensitive, so you could decide that 'store' operations are allowed to autovivify, like:

    { no autovivification qw(strict); use autovivification qw(store); my %hash; $hash{foo}{bar}{baz} = 1; # autovivifies OK delete $hash{fool}{bar}{baz}; # dies }

    If only autovivification weren't so tricky to type.

    perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (15)
As of 2015-07-07 22:00 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (93 votes), past polls