NAME
Perl::Critic::Policy::Compatibility::PerlMinimumVersionAndWhy - explicit Perl version for features used
DESCRIPTION
This policy is part of the Perl::Critic::Pulp
addon. It requires that you have an explicit use 5.XXX
etc for the Perl syntax features you use, as determined by Perl::MinimumVersion
.
use 5.010; # the // operator is new in perl 5.010
print $x // $y; # ok
If you don't have Perl::MinimumVersion
then nothing is reported. Certain nasty hacks are used to extract reasons and locations from Perl::MinimumVersion
.
This policy is under the "compatibility" theme (see "POLICY THEMES" in Perl::Critic). Its best use is when it picks up things like //
or qr
only available in a newer Perl than you thought to support.
An explicit use 5.xxx
in your code can be tedious, but makes it clear what you need (or think you need) and it gets a good error message if run on an older Perl. The config below lets you limit how far back you might go. Or if you don't care at all about this sort of thing you can always disable the policy completely from you ~/.perlcriticrc file in the usual way,
[-Compatibility::PerlMinimumVersionAndWhy]
MinimumVersion Mangling
A little mangling is applied to what Perl::MinimumVersion
normally reports (as of its version 1.20).
Pragma and module requirements like
use warnings
are dropped, since you might get a back-port from CPAN etc and the need for a module is better expressed in your distribution "prereq".A multi-constant hash with the
constant
module is not reported, since that's covered better by Compatibility::ConstantPragmaHash.
MinimumVersion Extras
The following extra checks are added to what Perl::MinimumVersion
normally reports.
qr//m
requires Perl 5.10, as the "m" modifier doesn't propagate correctly on aqr
until then.exists &subr
,exists $array[0]
ordelete $array[0]
require Perl 5.6.Foo::Bar::
double-colon package name requires Perl 5.005;pack
andunpack
format strings are checked for various new conversions in Perl 5.004 through 5.10.0. Currently this only works on literal strings or here-documents without interpolations, or.
operator concats of those.
CONFIGURATION
above_version
(version string, default none)-
Set a minimum version of Perl you always use, so reports are only about things both higher than this and higher than the document declares. The string is anything
version.pm
understands. For example,[Compatibility::PerlMinimumVersionAndWhy] above_version = 5.006
For example if you always use Perl 5.6 and set 5.006 like this then you can have
our
package variables without an explicituse 5.006
.
SEE ALSO
Perl::Critic::Pulp, Perl::Critic,
Perl::Critic::Policy::Modules::PerlMinimumVersion
is similar, but compares against a Perl version configured in your ~/.perlcriticrc rather than a version in the document.