I'm baffled. So you are telling me that I don't know about context in Perl?
I can't comment on what you know, just on what you say.
Context doesn't cause values to be coerced. Operators return different values based on the context. That's why $x = (4,5,6); and @a = (4,5,6); $x = @a; result in different values in $x.
And how, pray, is the "or" resolved? There.
I'm not sure what the means. Are you asking how it's determined when %... evaluates to a hash and when %... evaluates to a list? It's based on the operator that parses it. e.g. keys(%foo) or \%foo vs print(%foo).