in reply to Re^2: More intelligent warning?
in thread More intelligent warning?

But "I know you asked me for the count of tokens, but by the way, I've also stuck those tokens into @_ (silently overwriting your sub args!) just in case that's useful."? Nope! I can not see any rational for that.
You're assuming split was written to easily count the number of tokens. It wasn't. It was written to split a string. Which it does. Even in void and scalar context. The fact it returns the number of tokens in scalar context is the additional feature, not its reason for existence.

I guess the reasoning was "Hmmm, we have a function that splits a string into other strings. What can we do if there are users who call this in non-list context?" Not throwing away the result and putting in in the default list topicalizer doesn't seem that far fetched to me.

Replies are listed 'Best First'.
Re^4: More intelligent warning?
by BrowserUk (Patriarch) on Feb 05, 2010 at 16:34 UTC
    You're assuming split was written to easily count the number of tokens.

    Um. Nope. I made no such assumption. Thats purely your assumption.

    I agree part way. I can see the thought train that leads to some of it. I've written this function that splits strings. It can be called in 3 contexts. What is the logical thing to do in those contexts?

    1. List context: return the list of bits.
    2. Scalar context: Return how many bits.
    3. Void context: He's asked us to split, but wants nothing back. I guess we could stick the bits in @_ and let him access them there.

    But, I fail to see a good (nor even a bad) use case for returning the count AND sticking the bits in @_.

    Maybe there's one, but I just don't see it. If it stuck them in @F per -a, maybe.


    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.