package Tie::Hash::Default; require Tie::Hash; our @ISA = qw/Tie::ExtraHash/; sub TIEHASH { my ($class, $default) = @_; bless [ {}, $default ] => $class; } sub FETCH { my ($self, $key) = @_; exists $self->[0]->{$key} ? $self->[0]->{$key} : $self->[1]; } ############# package main; ## -1 is the default value for nonexistant keys in %h tie my %h, 'Tie::Hash::Default', -1; $h{foo} = $h{bar} = 1; print "$_ => $h{$_}\n" for qw/foo bar baz/;