You have completely lost me, John. What the heck are you asking? $obj.foo: calls public method "foo" on the object referenced by $obj.
$.foo shorthand for calling "foo" on self (in scalar context). As I understand it, although I could be confused, these have absolutely nothing to do with whether or not there's a private "foo" attr, other than the convenience of being able to declare that the public "foo" method is actually an accessor for a private "foo" attr via the "has" syntax.