NAME
Perl::Critic::Policy::Subroutines::ProhibitCallsToUndeclaredSubs
AFFILIATION
This policy is part of Perl::Critic::StricterSubs.
DESCRIPTION
This Policy checks that every unqualified subroutine call has a matching subroutine declaration in the current file, or that it explicitly appears in the import list for one of the included modules.
Some modules do not use the Exporter interface, and rely on other mechanisms to export symbols into your code. In those cases, this Policy will report a false violation. However, you can instruct this policy to ignore a particular subroutine name, as long as the appropriate package has been included in your file. See "CONFIGURATION" for more details.
CONFIGURATION
A list of exempt subroutines for this Policy can defined by specifying 'exempt_subs' as a string of space-delimited, fully-qualified subroutine names. For example, putting this in your .perlcriticrc file would allow you to call the ok
and is
functions without explicitly importing or declaring those functions, as long as the Test::More
package has been included in the file somewhere.
[Subroutines::ProhibitCallsToUndeclaredSubs]
exempt_subs = Test::More::ok Test::More::is
By default, there are no exempt subroutines, but we're working on compiling a list of the most common ones.
LIMITATIONS
This Policy assumes that the file has no more than one package
declaration and that all subs declared within the file are, in fact, declared into that same package. In most cases, violating either of these assumptions means you're probably doing something that you shouldn't do. Think twice about what you're doing.
Also, if you require
a module and subsequently call the import
method on that module, this Policy will not detect the symbols that might have been imported. In which case, you'll probably get bogus violations.
AUTHOR
Jeffrey Ryan Thalhammer <thaljef@cpan.org>
COPYRIGHT
Copyright 2007-2024 Jeffrey Ryan Thalhammer and Andy Lester
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.