package Whatever; { my $priv1 = sub { my $self = shift; # do something private }; sub public { my $self = shift; $self->$priv1(); } }
No need to check access since you cannot access $priv1 from another scope.

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

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • 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:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.