sub outer_func { my @result; defined(wantarray) ? (push @result, wantarray ? &inner_func() : scalar &inner_func()) : &inner_func(); # do some other stuff return (wantarray ? (@result) : $result[0]); }