An array has a changeable length. A list does not. An array is something you can push or pop, while a list is a set of values. Some people make the distinction that a list is a value while an array is a variable. Subroutines are passed and return lists, you put things into list con- text, you initialize arrays with lists, and you foreach() across a list. "@" variables are arrays, anonymous arrays are arrays, arrays in scalar context behave like the num- ber of elements in them, subroutines access their argu- ments through the array "@_", and push/pop/shift only work on arrays. As a side note, there's no such thing as a list in scalar context. When you say $scalar = (2, 5, 7, 9); you're using the comma operator in scalar context, so it uses the scalar comma operator. There never was a list there at all! This causes the last value to be returned: 9.