perl -le 'my $f = 1; ($f > 0 ? @a : $a ) = ("a", "b", "c")'
Assignment to both a list and a scalar at -e line 1, at EOF
Keep in mind that there are two different "=" operators: the list assignment operator (aassign) and the scalar assignment operator (sassign). The selection of the operator is based on whether the LHS of the assignment is list-ish or scalar-ish. The reason the above doesn't compile isn't the inability to change context at run-time, it's the inability to select an operator.
The two operators compared:
| Context Imposed on Operands | Stack on Input | In | Evaluates To | Stack on Output |
sassign | scalar | Two SVs | scalar | LHS as an alias | One SV |
list | LHS as an alias | One SV |
lassign | list | Two marked lists of SVs | scalar | Number of items in list returned by the RHS | One SV |
list | LHS as a list of aliases | One (unmarked) list of SVs |
Notice the significant differences in how Perl needs to setup the stack before the operator is called, making the choice of operators crucial.