class Person { # ... method thank (Person $person) { # ... } method accept_gift (Gift $gift) { $self->push_posession($gift); $self->thank($gift->giver); } } my $me = Person->new; my $bob = Person->new; my $dog = Gift->new(giver => $me, item => Puppy->new); $bob->accept_gift($dog); # ok Person::accept_gift($bob, $dog); # ok Person::accept_gift($dog); # dies