| Perl-Critic-Pulp documentation | view source | Contained in the Perl-Critic-Pulp distribution. |
Perl::Critic::Policy::Compatibility::PerlMinimumVersionAndWhy - explicit Perl version for features used
This policy is part of the Perl::Critic::Pulp|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::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 which
are only available in a newer Perl than you meant to target.
An explicit use 5.xxx can be tedious, but makes it clear what's needed
(or supposed to be needed) and it gives a good error message if run on an
older Perl.
The config options below let you limit how far back to go. Or if you don't care at all about this sort of thing you can always disable the policy completely from your ~/.perlcriticrc file in the usual way (see CONFIGURATION in Perl::Critic),
[-Compatibility::PerlMinimumVersionAndWhy]
Some mangling is applied to what Perl::MinimumVersion normally reports
(as of its version 1.28).
constant|constant module is not
reported, since that's covered better by
Compatibility::ConstantPragmaHash. use Errno are dropped, since you might get a
back-port from CPAN etc and any need for a module is better expressed in a
distribution "prereq".
use warnings are still reported. They're
normally an interface to a feature new in the Perl version it comes with and
can't be back-ported. (See OTHER NOTES below too.)The following extra checks are added to Perl::MinimumVersion.
qr//m, since "m" modifier doesn't propagate correctly on a qr until
5.10 pack() new < and > endianness
word [newline] => fat comma quoting across a newline.
word ended up a function call. It's presumed such code
is meant to quote in the 5.8 style, and thus requires 5.8 or higher. pack() new F native NV, D long double, i IV, j UV, ()
group, [] repeat count
exists &subr, exists $array[0] and delete $array[0] support. 0b110011 binary number literals. open(my $fh,...) etc auto-creation of filehandle. syswrite() length parameter optional. pack() new Z asciz, q,Q quads, ! native size, / counted
string, # comment
Foo::Bar:: double-colon package name quoting my ($x, undef, $y) = @values, using undef as a dummy in a my
list
use 5.xxx Perl version check through use. For earlier Perl it can
be BEGIN { require 5.000 } etc __PACKAGE__ special literal foreach my $foo lexical loop variable $coderef->() call with -> sysseek builtin function pack() new w BER integerpack() and unpack() format strings are only checked if they're literal
strings or here-documents without interpolations, or . operator concats
of those.
above_version (version string, default none)Set a minimum version of Perl you always use, so that reports are only about
things higher than this and higher than the document declares. The value is
anything the version.pm|version module understands.
[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.
skip_checks (list of check names, default none)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,
[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 quietly ignored.
use warnings is reported as a Perl 5.6 feature since its lexically-scoped
fine grain warnings control is new in that version. If targeting earlier
versions then it's often enough to drop use warnings, make sure your code
runs cleanly under perl -w, and leave it to applications to use
-w (or set $^W) or not, as they might desire.
warnings::compat offers a use warnings for earlier Perl, but it's not
lexical, instead setting $^W globally. Doing that from a module is
probably not a good idea, but in a script it could be an alternative to
#!/usr/bin/perl -w (per perlrun).
Perl::Critic::Pulp, Perl::Critic
Perl::Critic::Policy::Modules::PerlMinimumVersion, which is similar, but compares against a Perl version configured in your ~/.perlcriticrc rather than a version in the document.
http://user42.tuxfamily.org/perl-critic-pulp/index.html
Copyright 2008, 2009, 2010, 2011 Kevin Ryde
Perl-Critic-Pulp is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version.
Perl-Critic-Pulp is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with Perl-Critic-Pulp. If not, see <http://www.gnu.org/licenses/>.
| Perl-Critic-Pulp documentation | view source | Contained in the Perl-Critic-Pulp distribution. |