lists and arrays ... return different things in scalar context.
Actually, there is no such thing as a list in scalar context. What you describe is the behavior of the comma operator in scalar context. There never is a list.
Update: this is explained in perldoc -q "between a list". Incidentally, it is nearly exactly the same as what I said -- I must have subconsciously memorized the FAQ entry. :-)
It might be interesting to note that you can see this in action with B::Deparse, e.g.:
$ perl -MO=Deparse -e 'print scalar (2, 5, 7, 9);'
print scalar('???', '???', '???', 9);
-e syntax OK