Hash::DefaultValue - create a hash where the default value ain't undef
use 5.010; use Hash::DefaultValue; tie my %hash, 'Hash::DefaultValue', 42; say $hash{the_answer}; # says 42
Normally, if you try fetching a value from a hash where the key does not exist, you get undef.
my %hash; if (defined $hash{foobar}) { say "this will not happen!"; }
Hash::DefaultValue allows you to choose another value instead of undef. It tried to avoid changing any other part of the hash's behaviour. For example, it doesn't automatically create any hash keys that Perl wouldn't normally autovivify.
tie my %hash, 'Hash::DefaultValue', 42; say $hash{the_answer}; # says 42 my $exists = exists $hash{the_answer}; # false say keys %hash; # says nothing
And of course you can still store explicit values in the hash, as you'd expect:
tie my %hash, 'Hash::DefaultValue', 42; $hash{monkey} = 'Bobo'; say $hash{the_answer}; # says 42 say $hash{monkey}; # says "Bobo"
Delete operations on the hash are vaguely interesting:
tie my %hash, 'Hash::DefaultValue', 42; $hash{monkey} = 'Bobo'; my $the_answer = delete $hash{the_answer}; # undef my $monkey = delete $hash{monkey}; # "Bobo"
Any non-reference scalar can be used as a default value.
Coderefs can be used too, in which case when a default value is being fetched the coderef will be evaluated (in scalar context) and the return value used as the default. The coderef will have a reference to the tied hash, and the key being fetched passed as arguments. Additionally, the key will be available in $_ which often makes for nicer looking code.
$_
tie my %hash, 'Hash::DefaultValue', sub { $_ + 10 }; say $hash{32}; # says 42 say $hash{monkey}; # says 10
Other references are disallowed, which provides a handy extensibility point in the future. If you want to use some other reference, then wrap it in a coderef.
tie my %hash, 'Hash::DefaultValue', sub { \@foo };
The aliased module allows you to define aliases for class names, and works great for tie implementations.
use aliased 'Hash::DefaultValue' => 'HDV'; tie my %hash, HDV, 42;
Please report any bugs to http://rt.cpan.org/Dist/Display.html?Queue=Hash-DefaultValue.
Hash::Missing is a subclass of this module.
Hash::WithDefaults allows you to default particular keys by providing a template hashref.
Toby Inkster <tobyink@cpan.org>.
This software is copyright (c) 2012 by Toby Inkster.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
To install Hash::DefaultValue, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Hash::DefaultValue
CPAN shell
perl -MCPAN -e shell install Hash::DefaultValue
For more information on module installation, please visit the detailed CPAN module installation guide.