package Tie::HashDefaultValue;
require Tie::Hash;
@ISA = 'Tie::ExtraHash';
use strict;
sub TIEHASH {
my ($class, $default) = @_;
return bless [{}, $default], $class;
}
sub FETCH {
my ($tied, $key) = @_;
if (exists $tied->[0]{$key}) {
return $tied->[0]{$key};
}
else {
return $tied->[1];
}
}
1;
####
tie my %bar, 'Tie::HashDefaultValue', sub {};
# time passes
$bar{foo}->();
####
sub FETCH { exists $_[0][0]{$_[1]} ? $_[0][0]{$_[1]} : $_[0][1] }