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

FreeBSD Manual Pages

  
 
  

home | help
Perl::Critic::Policy::VUsersContributedoPerlPDocumentationeparatedStatements(3))

NAME
       Perl::Critic::Policy::ValuesAndExpressions::ProhibitCommaSeparatedStatements
       - Don't use the comma operator as a statement separator.

AFFILIATION
       This Policy is part of the core Perl::Critic distribution.

DESCRIPTION
       Perl's comma statement separator	has really low precedence, which leads
       to code that looks like it's using the comma list element separator not
       actually	doing so.  Conway suggests that	the statement separator	not be
       used in order to	prevent	this situation.

       The confusion that the statement	separator causes is primarily due to
       the assignment operators	having higher precedence.

       For example, trying to combine two arrays into another like this	won't
       work:

	   @x =	@y, @z;

       because it is equivalent	to

	   @x =	@y;
	   @z;

       Conversely, there are the built-in functions, like "print", that
       normally	force the rest of the statement	into list context, but don't
       when called like	a subroutine.

       This is not likely to produce what is intended:

	   print join q{, }, 2,	3, 5, 7, ": the	single-digit primes.\n";

       The obvious fix is to add parentheses.  Placing them like

	   print join( q{, }, 2, 3, 5, 7 ), ": the single-digit	primes.\n";

       will work, but

	   print ( join	q{, }, 2, 3, 5,	7 ), ":	the single-digit primes.\n";

       will not, because it is equivalent to

	   print( join q{, }, 2, 3, 5, 7 );
	   ": the single-digit primes.\n";

CONFIGURATION
       This policy can be configured to	allow the last statement in a "map" or
       "grep" block to be comma	separated.  This is done via the
       "allow_last_statement_to_be_comma_separated_in_map_and_grep" option
       like so:

	   [ValuesAndExpressions::ProhibitCommaSeparatedStatements]
	   allow_last_statement_to_be_comma_separated_in_map_and_grep =	1

       With this option	off (the default), the following code violates this
       policy.

	   %hash = map {$_, 1} @list;

       With this option	on, this statement is allowed.	Even if	this option is
       off, using a fat	comma "=>" works, but that forces stringification on
       the first value,	which may not be what you want.

BUGS
       Needs to	check for "scalar( something, something	)".

AUTHOR
       Elliot Shank "<perl@galumph.com>"

COPYRIGHT
       Copyright (c) 2007-2011 Elliot Shank.

       This program is free software; you can redistribute it and/or modify it
       under the same terms as Perl itself.  The full text of this license can
       be found	in the LICENSE file included with this module.

Perl::Critic::Policy::ValuesAndExpressions::ProhibitCommaSeparatedStatements(3)

NAME | AFFILIATION | DESCRIPTION | CONFIGURATION | BUGS | AUTHOR | COPYRIGHT

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

home | help