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
In reply to Re^8: Confused as to why the "casting context" is mis-behaving (void,void,scalar)
by tye
in thread Confused as to why the "casting context" is mis-behaving
by kiz
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |