You're just not paying attention to the grammar of the language, so it looks arbitrary. If you ignore the grammar of English you'll constantly get tripped up as well. That's life. If you approach Perl saying, "Here's how it should work", you'll be disappointed and shortly after that very frustrated. If you approach it asking, "How does it work?" you'll find that there are rules and it really works according to them.

In Perl there are two basic contexts. List context. And scalar context. In list context any data structure will try to produce a flat list. In scalar context you'll get one thing. The distinction is entirely grammatical. Generally assign stuff somewhere that takes a list, and you get list context. Pass data into a function and you'll get list context. Assign it to a scalar and you'll get scalar context.

So when you see my @A = ("aaa", "aaa", ("bbb", "bbb")); what happens is that there is a list context imposed on the RHS (you're assigning to an array, which takes a list of things) so the RHS is flattened out into a list. Namely ("aaa", "aaa", "bbb", "bbb"). Nothing strange going on with data structures. It is all a question of what the grammar says.

Now to answer the question you had here, the \\ operator takes a reference to something. Think of it as like taking a pointer to a variable in C or C++. (Except that the memory-management is taken care of for you.) Therefore $rx points to whatever @xxx currently has. Updating @xxx is the same as updating @$rx, and vice versa.

If this bothers you, please describe what you'd expect from similar code with pointers in C or C++. Perl is just acting the same way.

If you want a private array you can use the anonymous array constructor, []. In the example that you gave, you'd get the result you were hoping for from:
\n@xxx = (1, 2, 3);\n$rx = [@xxx];\n@xxx = (9,8,7);\nprint($rx->[0] . "\\n");\n

Cheers,
Ben