This confuses me: I thought an array *is* a value.
Nope. Arrays are variables.
Sure, its a value that holds other values:
Anything that "holds" anything is a variable, not a value.
Are you saying that only scalars have C<but> properties
(i.e. an ArrayRef can, but an array can't)?
I'm saying that only scalar *values* can have C<but> properties. And yes, that includes Array references, but not arrays.
My mental image is of variables that provide access to values: variables are compile-time, and lexically scoped: values are run-time, and (can be) dynamically scoped.
Not quite. Variables are containers, values are the data they contain. Compile-time/run-time and scoping are orthogonal to that. Damian