What's actually happening is that $norm{$val} is the reference to the array. Decorating it by @{ $norm{$val} } accesses the array.

It's the same kind of dereferencing that you go through in C to get at a struct that you have a pointer to.

You could also write ${ $norm{$val} }[3] to access the 4'th element. Or use the syntactic shortcut $norm{$val}[3].

As for your expectation, you're tripping over the fact that Perl is a list-oriented language. There is no such thing as a straight list in Perl. Nothing will act "like a list". Instead in a lot of places things will be interpreted as lists and will do something interesting.

Cheers,
Ben