This policy is part of the Perl::Critic::Pulp
add-on. It asks you not to quote a version number string as the sole
argument to a use or no statement.
use Foo::Bar 1.50; # bad
use Foo::Bar 1.50; # ok
no Abc::Def 2.000_010; # bad
no Abc::Def 2.000_010; # ok
The unquoted form uses Perls builtin module version check (Perl 5.004 up)
and is always enforced. The quoted form is passed to the modules
import() and relies on it to do the check. If theres no import()
then the quoted form is silently ignored.
Exporter as used by many modules provides an import()
which checks a version number arg, so those modules are fine. But the idea
of this policy is to do what works always and on that basis is under the
bugs theme (see POLICY THEMES in Perl::Critic).
The builtin module version check is new in Perl 5.004. For earlier versions
both forms behave the same, with the string or number going through to the
module import and so may or may not be checked. But even in code
supporting older Perl its good to write the unquoted number so later Perl
will be certain to enforce it.
The policy only applies to a single number string argument, anything else is
taken to be a module parameters.
no Abc::Def 123, ABC; # ok
use lib ..; # ok
If youre a bit nervous about unquoting because floating point version
numbers are often not exactly representable in binary, well, yes, thats
true, but in practice it works, either by converting the same way everywhere
in the program or by treated as a string to the version.pm module anyway.
Copyright 2009, 2010, 2011, 2012, 2013, 2014, 2015 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
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
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/>.