package TieHash; sub TIEHASH { my $self = {}; bless $self; return $self; } sub FETCH { my $self = shift; my $key = shift; print "FETCH $key\n"; return $self->{$key}; } sub STORE { my $self = shift; my ($key, $val) = @_; print "STORE $key => $val\n"; $self->{$key} = $val; return $self; } sub new { my %self; tie %self, 'TieHash'; $self = \%self; bless $self; return $self; } package Wrapper; sub new { my %self; tie %self, 'TieHash'; $self = \%self; bless $self; return $self; } package main; # Boring tie tie %h, 'TieHash'; $h{x} = 'Hello!'; print $h{x}; print "\n\n"; # SUPER COOL INNER-OBJECT TIE! $x = new TieHash; $x->{m} = 'Dude.'; print $x->{m}; print "\n\n";