Perl::Critic::Policy::Community::Wantarray(3pm)

Perl::Critic::Policy::Community::Wantarray3pm

Don't write context-sensitive functions using wantarray

Overview

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. Instead, functions should be explicitly documented to return either a scalar value or a list, so there is no potential for confusion or vulnerability.

  return wantarray ? ('a','b','c') : 3; # not ok
  return CORE::wantarray ? ('a', 'b', 'c') : 3; # not ok
  return ('a','b','c');                 # ok
  return 3;                             # ok
  sub get_stuff {
    return wantarray ? @things : \@things;
  }
  my $stuff = Stuff->new(stuff => get_stuff()); # oops! function will return a list!

Affiliation

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

Configuration

This policy is not configurable except for the standard options.

Releases

2 releases since Debian 12 (Bookworm); the text changed 1 time.

  1. 12
  2. 13

Author

Dan Book, "[email protected]"

From libperl-critic-community-perl 1.0.4-1 in Debian 13 (Trixie). Parsed by carta from the page's man source.