Yes, the context of the function call can be whatever you want.
$x = @array[+foo];
The call to foo is made in numeric item context. The result, a number, is then "evaluated" in list context and passed to postcurcumfix:< > as the first item in the list, which it can perceive in various ways depending on the parameter list declaration. But it knows that a single number was passed and acts accordingly.
Suppose that the value in the array at that position is 42. Will the return value contain a scalar, 42, or a list of one item? The function execution does not get to impose the context of its surrounding expression; that is decided at compile time. Since the argument is not known to be singular at compile-time (using rules yet to be explained), it must be in list context. So:
$temp= foo;
$x= @array[$temp]; # holds Num of 42
$x= @array[foo]; # holds Array ref of [ 42 ]
I suppose that the presence of a context specifier "+" as the top-level expression in the brackets could be among the rules the compiler uses to decide this is the singular form. But this is NOT explained anywhere, and that is my point.
—John Seriously jet-lagged |