NAME
Perl::Critic::Policy::Community::Wantarray - Don't write context-sensitive functions using wantarray
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. 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.
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.