package SmartHash; use strict; use warnings; use Carp; use overload "%{}" => sub { my $caller = caller; croak "Illegal object access" unless $caller->isa(__PACKAGE__); return shift if $caller eq __PACKAGE__; return shift->{$caller} ||= {}; }, fallback => 1; 1;