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 contextThe return and wantarray functions in Chapter 3 of Programming Perl and perlfunc (1)