---
name: "Perl::Critic::Policy::Community::AmpersandSubCalls"
section: "3pm"
platform: "linux"
package: "libperl-critic-community-perl"
version: "1.0.4-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Perl::Critic::Policy::Community::AmpersandSubCalls"
---

# Perl::Critic::Policy::Community::AmpersandSubCalls(3pm)

Don't use & to call subroutines

## NAME

Perl::Critic::Policy::Community::AmpersandSubCalls - Don't use & to call subroutines

## DESCRIPTION

Ampersands (`"&"`) 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 `"&foo;"` with no arguments will pass on the contents of `@_` 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 Perl::Critic::Policy::Subroutines::ProhibitAmpersandSigils, and performs the same function but in the `"community"` theme.

## AFFILIATION

This policy is part of Perl::Critic::Community.

## CONFIGURATION

This policy is not configurable except for the standard options.

## AUTHOR

Dan Book, `"dbook@cpan.org"`

## 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.

## SEE ALSO

Perl::Critic
