use strict; package Object; sub new { bless {}, "Object" } sub foo { "ObjectFoo\n" } package Tied; sub TIESCALAR { my $class = shift; my $o = shift; bless \$o, $class; } sub FETCH { my $self = shift; print "\n"; $self } sub foo { "TiedFoo\n" } package main; my $o = new Object(); print $o->foo(); tie $o, 'Tied'; print $o->foo(); untie $o; eval { print $o->foo() }; print "NoFoo\n" if $@;