table of contents
Perl::Critic::Policy::Subroutines::ProtectPrivateSubs(3pm) | User Contributed Perl Documentation | Perl::Critic::Policy::Subroutines::ProtectPrivateSubs(3pm) |
NAME¶
Perl::Critic::Policy::Subroutines::ProtectPrivateSubs - Prevent access to private subs in other packages.AFFILIATION¶
This Policy is part of the core Perl::Critic distribution.DESCRIPTION¶
By convention Perl authors (like authors in many other languages) indicate private methods and variables by inserting a leading underscore before the identifier. This policy catches attempts to access private variables from outside the package itself.The subroutines in the POSIX package which begin with an underscore (e.g. "POSIX::_POSIX_ARG_MAX") are not flagged as errors by this policy.
CONFIGURATION¶
You can define what a private subroutine name looks like by specifying a regular expression for the "private_name_regex" option in your .perlcriticrc:[Subroutines::ProtectPrivateSubs] private_name_regex = _(?!_)\w+
The above example is a way of saying that subroutines that start with a double underscore are not considered to be private. (Perl::Critic, in its implementation, uses leading double underscores to indicate a distribution-private subroutine-- one that is allowed to be invoked by other Perl::Critic modules, but not by anything outside of Perl::Critic.)
You can configure additional subroutines to accept by specifying them in a space-delimited list to the "allow" option:
[Subroutines::ProtectPrivateSubs] allow = FOO::_bar FOO::_baz
These are added to the default list of exemptions from this policy. Allowing a subroutine also allows the corresponding method call. So "FOO::_bar" in the above example allows both "FOO::_bar()" and "FOO->_bar()".
HISTORY¶
This policy is inspired by a similar test in B::Lint.BUGS¶
Doesn't forbid "$pkg->_foo()" because it can't tell the difference between that and "$self->_foo()".SEE ALSO¶
Perl::Critic::Policy::Variables::ProtectPrivateVarsAUTHOR¶
Chris Dolan <cdolan@cpan.org>COPYRIGHT¶
Copyright (c) 2006-2011 Chris Dolan.This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. The full text of this license can be found in the LICENSE file included with this module.
2018-07-27 | perl v5.26.2 |