package MyPackage; use overload q/+/ => \&add; sub add { $_[0]->new( $_[0]->{foo} + (ref($_[1]) ? $_[1]->{foo} : $_[1]) ) }