Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
Perl::Critic::PolicyPeUserCContributedcPerloDocumentationConstantPragmaHash(3)

NAME
       Perl::Critic::Policy::Compatibility::ConstantPragmaHash - new enough
       "constant" module for multiple constants

DESCRIPTION
       This policy is part of the "Perl::Critic::Pulp" add-on.	It requires
       that when you use the hash style	multiple constants of "use constant"
       that you	explicitly declare either Perl 5.8 or "constant" 1.03 or
       higher.

	   use constant	{ AA =>	1, BB => 2 };	    # bad

	   use 5.008;
	   use constant	{ CC =>	1, DD => 2 };	    # ok

	   use constant	1.03;
	   use constant	{ EE =>	1, FF => 2 };	    # ok

	   use constant	1.03 { GG => 1,	HH => 2	};  # ok

       The idea	is to keep you from using the multi-constant feature in	code
       which might run on Perl 5.6, or might in	principle still	run there.  On
       that basis this policy is under the "compatibility" theme (see "POLICY
       THEMES" in Perl::Critic).

       If you declare "constant	1.03" then the code can	still run on Perl 5.6
       and perhaps earlier if the user gets a suitably newer "constant"	module
       from CPAN.  Or of course	for past compatibility just don't use the hash
       style at	all!

   Details
       A version declaration must be before the	first multi-constant, so it's
       checked before the multi-constant is attempted (and gives an obscure
       error).

	   use constant	{ X => 1, Y => 2 };	  # bad
	   use 5.008;

       A "require" for the perl	version	is not adequate	since the "use
       constant" is at "BEGIN" time, before plain code.

	   require 5.008;
	   use constant	{ X => 1, Y => 2 };	  # bad

       But a "require" within a	"BEGIN"	block is ok (an	older style, still
       found occasionally).

	   BEGIN { require 5.008 }
	   use constant	{ X => 1, Y => 2 };	  # ok

	   BEGIN {
	     require 5.008;
	     and_other_setups ...;
	   }
	   use constant	{ X => 1, Y => 2 };	  # ok

       Currently ConstantPragmaHash pays no attention to any conditionals
       within the "BEGIN", it assumes any "require" there always runs.	It
       could be	tricked	by some	obscure	tests but hopefully anything like that
       is rare.

       A quoted	version	number like

	   use constant	'1.03';	   # no	good

       is no good, only	a bare number is recognised by "use" and acted on by
       ConstantPragmaHash.  A string like that goes through to "constant" as
       if a name to define (which you'll see it	objects	to as soon as you try
       run it).

   Drawbacks
       Explicitly adding version numbers to your code can be irritating	if
       other modules you're using only run on 5.8 anyway.  But declaring what
       your own	code wants is accurate,	it allows maybe	for backports of those
       other things, and explicit versions can be grepped out to create	or
       check Makefile.PL or Build.PL prereqs.

       As always if you	don't care about this and in particular	if you only
       ever use	Perl 5.8 anyway	then you can disable "ConstantPragmaHash" from
       your .perlcriticrc in the usual way (see	"CONFIGURATION"	in
       Perl::Critic),

	   [-Compatibility::ConstantPragmaHash]

SEE ALSO
       Perl::Critic::Pulp, Perl::Critic,
       Perl::Critic::Policy::Compatibility::ConstantLeadingUnderscore,
       Perl::Critic::Policy::ValuesAndExpressions::ProhibitConstantPragma,
       Perl::Critic::Policy::Modules::RequirePerlVersion

       "Constant Functions" in perlsub

HOME PAGE
       <http://user42.tuxfamily.org/perl-critic-pulp/index.html>

COPYRIGHT
       Copyright 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017
       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 v5.24.1	    Perl::Critic::Policy::Compatibility::ConstantPragmaHash(3)

NAME | DESCRIPTION | SEE ALSO | HOME PAGE | COPYRIGHT

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=Perl::Critic::Policy::Compatibility::ConstantPragmaHash&sektion=3&manpath=FreeBSD+12.1-RELEASE+and+Ports>

home | help