While the read-only keys solutions (Tie::StrictHash and from Hash::Util) provide one method of preventing autovivification for hashes, they also prevent normal key creation.
What I've long wanted was a 'no autovivify;' pragma that would prevent autovivification in the scope where it is used (for both hashes and arrays) but that would not prevent normal hash key insertion.
I like to be able to assign new keys in the normal manner:
but I often prefer to not create new keys via autovivification, which is different:$hash{key}= 'value';
Sometimes it is very nice to be very strict in how you code. It can often find lots of bugs for you. That is why we have use strict;. Perl could really use a similar tool for optionally turning off autovivification. I'd certainly make a lot of use of it (and I've found several bugs the hard way that would have been caught quite easily if I'd had such an option). - tyeno autovivify; my %hash; # Examples of normal key insertion: $hash{key1}= 'value'; # succeeds $hash{key2}= {}; # succeeds $hash{key2}{key3}= 'value'; # succeeds # Examples of autovivification: $hash{key4}{key3}= 'value'; # should fail! $hash{key5}[0]= 1; # should fail!
In reply to Re: non-autovivifing hash (not read-only keys)
by tye
in thread non-autovivifing hash
by bobdeath
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |