|Do you know where your variables are?|
As you've pointed out, the comma is the list operator. It is evaluated left to right, so naturally if being asigned to a scalar lvalue, everything except for the right-most list item will be tossed out and replaced by the right-most item. In list context, it delimits the items in a list..
The => operator is mostly synonomous with the comma operator. It exists to provide cleaner reading of key=>value pairs, but can be used where a comma can be used in the creation of a list.
The . period operator, known as a string concatenation operator, does just that; it concatenates strings.
The . operator doesn't inherently create lists, nor does the , operator inherently create concatenated strings. It is accurate to observe that some functions and syntaxes will represent a list in a similar way to which it represents a string. The obvious example is print, where a list will be output the same way as a concatenated string. But do not mistake indistinguishable behavior in one context, for synonomous behavior. When you print a list, you are printing a list not a concatenated string. And when you print a concatenated string, you are not printing a list. The distinction may be difficult or impossible to detect in certain usages of statements such as print, but the distinction in general practice and theory is vastly different.
You would never create a list of elements to be assigned to an array by concatenating strings. You would never create a string by assigning it a list. There is no similarity between the two. There simply exist situations where the language acts similarly when given a string or a list; print being one of those situations.
Keeping concatenation, and list creation straight should be no more of a problem for people than most other features of the Perl syntax and lexicon.
"If I had my life to do over again, I'd be a plumber." -- Albert Einstein