Perl::Critic::Policy::Compatibility::PerlMinimumVersionAndWhy - explicit Perl version for features used
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.
Perl::Critic::Pulp
use 5.XXX
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.
//
qr
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,
use 5.xxx
[-Compatibility::PerlMinimumVersionAndWhy]
Some 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".
use warnings
A multi-constant hash with the constant module is not reported, since that's covered better by Compatibility::ConstantPragmaHash.
constant
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 a qr until then.
qr//m
exists &subr, exists $array[0] or delete $array[0] require Perl 5.6.
exists &subr
exists $array[0]
delete $array[0]
0b110011 binary number literals require Perl 5.6.
0b110011
Foo::Bar:: double-colon package name requires Perl 5.005.
Foo::Bar::
use 5.005 and similar Perl version check new in Perl 5.004. For earlier Perl it should be BEGIN { require 5.003 } or similar instead.
use 5.005
BEGIN { require 5.003 }
__PACKAGE__ special literal new in Perl 5.004.
__PACKAGE__
foreach my $foo lexical loop variable new in Perl 5.004.
foreach my $foo
pack and unpack 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, and . operator concats of those.
pack
unpack
.
above_version
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,
version.pm
[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 explicit use 5.006.
our
use 5.006
skip_checks
Skip the given MinimumVersion checks (a space separated list). The check names are shown in the violation message and come from Perl::MinimumVersion::CHECKS. For example,
Perl::MinimumVersion::CHECKS
[Compatibility::PerlMinimumVersionAndWhy] skip_checks = _some_thing _another_thing
This can be used for checks you believe are wrong, or where the compatibility matter only affects limited circumstances which you understand.
The check names are likely to be a bit of a moving target, especially the Pulp additions. Unknown checks in the list are silently ignored.
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.
Perl::Critic::Policy::Modules::PerlMinimumVersion
To install Perl::Critic::Pulp, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Perl::Critic::Pulp
CPAN shell
perl -MCPAN -e shell install Perl::Critic::Pulp
For more information on module installation, please visit the detailed CPAN module installation guide.