sub inner_func { if (wantarray) { print "ARRAY CONTEXT\n"; } elsif (defined wantarray) { print "SCALAR CONTEXT\n"; } else { print "VOID CONTEXT\n"; } } sub outer_func { my @result; if (wantarray) { # propagate context @result = inner_func(); } elsif (defined wantarray) { $result[0] = inner_func(); } else { inner_func(); } # do some other stuff return (wantarray ? (@result) : $result[0]); } my @r = outer_func(); my $r = outer_func(); outer_func();