No need to check access since you cannot access $priv1 from another scope.package Whatever; { my $priv1 = sub { my $self = shift; # do something private }; sub public { my $self = shift; $self->$priv1(); } }
update:
This is the probably the strongest protection you can get. Barring things like PadWalker (usually not relevant) or explicit passing around of the subroutine reference, there really is no way at all to get at the sub outside of the scope.
I have never used this in anything serious since I don't see the point of enforced private (or protected) methods, and it's a little bit more work.
Also, this construct is not exactly equivalent to a private method as used in, say, C++, since it's based on lexical scoping, instead of class/package scoping.
Note that it's trivial to insert/redefine methods into a perl package, so "naive" "private" methods are no guarantee in perl, anyway.
In reply to Re: Howto keep private methods private?
by Joost
in thread Howto keep private methods private?
by perl-diddler
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |