in reply to Short circut operators in list context

Not sure what you expected...your or's are all on the right side of a list assignment, hence in list context. The left operand of or is forced to scalar context and the right operand gets propagated list context from the list assignment.

Update: This can be taken advantage of in a map; e.g. you can say @lookups = map { $lookup{$_} or () } @list; If the right side got forced to scalar context, that () would result in an undef being added to @lookups instead of just skipping that element of @list.

Update: fixed backward uses of left and right