in reply to Re: Encapsulation without methods
in thread Encapsulation without methods

perldoc perlsub says of lvalue subs:
They violate encapsulation. A normal mutator can check the supplied ar +gument before setting the attribute it is protecting, an lvalue subro +utine never gets that chance.
A tied scalar can check before setting. Of course, in your example, if you had tied the foo element, then you'd have encapsulation.

We're not really tightening our belts, it just feels that way because we're getting fatter.

Replies are listed 'Best First'.
Re^3: Encapsulation without methods
by stvn (Monsignor) on Jun 22, 2004 at 04:33 UTC
    They violate encapsulation. A normal mutator can check the supplied argument before setting the attribute it is protecting, an lvalue subroutine never gets that chance.

    Hmmm, for some reason, I thought that you could check that value. I guess that will teach me to post past my bedtime :)

    I guess deep down, I want them to be like C#'s properties, but alas.....

    A tied scalar can check before setting. Of course, in your example, if you had tied the foo element, then you'd have encapsulation.

    While dragonchild may be mis-understanding your idea, he is correct that tied variables are a pretty sizable performance hit, and are propbably better not used in this way, where a simple getter/setter combo will do.

    Of course, even better OO practice is to design classes with the minimum of getter/setters in the first place. Personally I only create them if and when I need them, so that I am not tempted to let it all hang out for no reason.

    -stvn