Of course, read the docs. However, here's a very short answer.
in reply to Why use references?
1. To model muldimensional arrays, (hashes, etc.) An element of an array must be a scalar, so it can't be another array - but it can be a reference to an array.
2. It is usual more economical to pass an array (or hash) reference to a sub (and dereference as needed inside the
sub) rather than passing the whole array (or hash.) And when
passing several arrays (or hashes) to a sub, they get flattened into a single list and lose their integrity; but you can pass several array or hash references to a sub and then dereference inside the sub.
Of course, the language could have been designed so that
references only appear behind the scenes and aren't handled
by the user, but then likely a lot of flexibility would have been lost.