# In these examples, @ret is your return in list context. return @ret; return wantarray ? @ret : \@ret; return @ret[0..$#ret]; return wantarray ? @ret : $ret[0]; if (wantarray) { return @ret; } elsif (1 == @ret) { return $ret[0]; } else { croak(" did not produce a scalar return"); } # And for something completely different... sub foo { if (1 != @_) { return map foo($_), @_; } # body of foo here. return $whatever; }