in reply to question 1st - undefined behaviour
1)$x - return's copy of object $x and then return it's value in numeric context.
While scalar, list and void context affect what an operator returns, that's not the case for numeric, string and boolean context. They're not actually contexts as they don't affect what an operator returns.
For example, addition imposes a scalar context on its operands, but those operands could just as easily return strings instead of numbers. The addition operator itself will convert the scalars to numbers.
$x places that scalar on the stack. Not a copy of it.