home | O'Reilly's CD bookshelfs | FreeBSD | Linux | Cisco | Cisco Exam  

10.6. Detecting Return Context


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

See Also

The return and wantarray functions in Chapter 3 of Programming Perl and perlfunc (1)

Previous: 10.5. Passing Arrays and Hashes by Reference Perl Cookbook Next: 10.7. Passing by Named Parameter
10.5. Passing Arrays and Hashes by Reference Book Index 10.7. Passing by Named Parameter

Library Navigation Links

Copyright © 2001 O'Reilly & Associates. All rights reserved.