package Perl::Critic::Policy::Community::AmpersandSubCalls; use strict; use warnings; use Perl::Critic::Utils qw(:severities :classification :ppi); use parent 'Perl::Critic::Policy::Subroutines::ProhibitAmpersandSigils'; our $VERSION = 'v1.0.4'; sub default_severity { $SEVERITY_HIGH } sub default_themes { 'community' } 1; =head1 NAME Perl::Critic::Policy::Community::AmpersandSubCalls - Don't use & to call subroutines =head1 DESCRIPTION Ampersands (C<&>) were once needed to call subroutines, but in modern Perl they are not only unnecessary but actually change the behavior from what you may expect. Calling a subroutine with an ampersand ignores the subroutine's prototype if any, which may change what arguments the subroutine receives. Additionally, calling a subroutine as C<&foo;> with no arguments will pass on the contents of C<@_> from the current subroutine, which may be quite surprising. Unless used intentionally for this behavior, the ampersand should simply be omitted. my $value = &foo(); # not ok my $sum = &foo(1,2); # not ok my $value = foo(); # ok my $sum = foo 1,2; # ok This policy is a subclass of the core policy L, and performs the same function but in the C theme. =head1 AFFILIATION This policy is part of L. =head1 CONFIGURATION This policy is not configurable except for the standard options. =head1 AUTHOR Dan Book, C =head1 COPYRIGHT AND LICENSE Copyright 2015, Dan Book. This library is free software; you may redistribute it and/or modify it under the terms of the Artistic License version 2.0. =head1 SEE ALSO L