We're kinda confusing levels here. There are really three viewpoints of an object:
- The external public view.
- The internal private view.
- The hidden MOP view
I was speaking from the perspective of #2, not #3. From the #2 perspective, for any normal attribute without an explicit private accessor,
$!foo and
self!foo are largely interchangeable, give or take a sigil. The MOP may or may not make visible the call that implements
$!foo, since
$!foo is viewed under #2 as fundamentally a reference to the storage. The MOP is free to not implement
method !foo at all if it can determine that it is unneeded,
either by analysis or just by being lazy about autoloading one. From the #2 viewpoint,
$!foo is just a variable, and
method !foo is a (possibly autogenerated) accessor to the variable.
From the #3 perspective, sure, the fundamental accessor for the slot could be identical to method !foo, but then you're kinda hosed if the user wants to actually define the !foo method as a wrapper around $!foo, which would be an infinite regress if you confuse the user's slot accessor with the MOP's slot accessor. So unlike the situation with $.foo, the $!foo notation is not just syntactic sugar for a private accessor, and a private method must be called as self!foo.
So why would the user ever want to define their own private accessor? Primarily to mediate how much you want to dynamically "untrust" any other classes you've trusted by declaration.
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
|
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.