It's fine by me if you want to do this, as long as you do it the same way Perl 6 is going to do it—or close enough that the translator won't have issues. That means, among other things, that the body always runs, even in lvalue context, and any validation is done by some kind of a callback, not by the body code, which is responsible *only* for identifying and returning some object that can proxy for the attribute in question.