---
name: "Perl::Critic::Policy::Community::EmptyReturn"
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::EmptyReturn"
---

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

Don't use return with no arguments

## NAME

Perl::Critic::Policy::Community::EmptyReturn - Don't use return with no arguments

## DESCRIPTION

Context-sensitive functions, while one way to write functions that DWIM (Do What I Mean), tend to instead lead to unexpected behavior when the function is accidentally used in a different context, especially if the function's behavior changes significantly based on context. This also can lead to vulnerabilities when a function is intended to be used as a scalar, but is used in a list, such as a hash constructor or function parameter list. `"return"` with no arguments will return either `"undef"` or an empty list depending on context. Instead, return the appropriate value explicitly.

```
  return;       # not ok
  return ();    # ok
  return undef; # ok
  sub get_stuff {
    return unless @things;
    return join(' ', @things);
  }
  my %stuff = (
    one => 1,
    two => get_stuff(), # oops! function returns empty list if @things is empty
    three => 3,
  );
```

Empty returns are permitted by this policy if the subroutine contains no explicit return values, indicating it is intended to be used in void context.

## CAVEATS

This policy currently only checks return statements in named subroutines, anonymous subroutines are not checked. Also, return statements within blocks, other than compound statements like `"if"` and `"foreach"`, are not considered when determining if a function is intended to be used in void context.

Any non-empty return will cause empty returns within the same subroutine to report violations, even though in list context, `"return"` and `"return ()"` are functionally equivalent. It is recommended to explicitly specify an empty list return with `"return ()"` in a function that intends to return list context.

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