in reply to Re^6: Confused as to why the "casting context" is mis-behaving (void,void,scalar)
in thread Confused as to why the "casting context" is mis-behaving

I believe the reason for the scalar (not void) context for the commented lines so that you don't get warnings from:

I've always thought it was that the compiler can't perform static analysis across function calls. (By the time of assigning return values, does the compiler know that any element of the stack was a literal?)

  • Comment on Re^7: Confused as to why the "casting context" is mis-behaving (void,void,scalar)

Replies are listed 'Best First'.
Re^8: Confused as to why the "casting context" is mis-behaving (void,void,scalar)
by tye (Sage) on Oct 22, 2010 at 19:51 UTC
    I've always thought it was that the compiler can't perform static analysis across function calls.

    That would be a reason for the warning to not happen (and a reasonable one). It is not a reason for the context to be scalar rather than void.

    But, yes, I tried to remember what was discussed when this inconsistency was brought up and threw in a half-remembered guess at the last minute. It turns out to be incorrect. The "useless use of constant in void context" doesn't happen for the return value of a sub, even when the sub is called in a void context.

    I don't recall specific enough details about the last time this came up to have found a prior discussion of it. But I eventually stumbled upon ysth providing a much better explanation of this exception, Re: If you believe in Lists in Scalar Context, Clap your Hands (which I don't believe is even the discussion I was remembering).

    - tye