You want to know whether your function was called in scalar context or list context. This lets you have one function that does different things, like most of Perl's built-in functions.
Use the wantarray()
function, which has three possible return values depending on how the current function was called:
if (wantarray()) { # list context } elsif (defined wantarray()) { # scalar context } else { # void context }
Many built-in functions act differently when called in scalar context than in list context. A user-defined function can learn the context it was called in by examining the return value from the wantarray
built-in. List context is indicated by a true return value. If it returns a value that is false but defined, then the function's return value will be used in scalar context. If it returns undef
, it isn't being asked to provide a value at all.
if (wantarray()) { print "In list context\n"; return @many_things; } elsif (defined wantarray()) { print "In scalar context\n"; return $one_thing; } else { print "In void context\n"; return; # nothing } mysub(); # void context $a = mysub(); # scalar context if (mysub()) { } # scalar context @a = mysub(); # list context print mysub(); # list context
The return
and wantarray
functions in Chapter 3 of Programming Perl and perlfunc (1)
Copyright © 2002 O'Reilly & Associates. All rights reserved.