http://qs1969.pair.com?node_id=11115442


in reply to accessing an anonymous array

I am sorry to say that "anonymous array" is actually a misnomer. It's not an array, it's a reference to an array.

These two snippets are actually equivalent:

my $r = ['a', 'b', 'c'];
and
my $r; { my @a = ('a', 'b', 'c'); $r = \@a; }

So when you try using \[1] to get a reference to the anonymous array, you're ending up with a reference to an array reference.

Drop the backslashes n front of the open square brackets: you don't need them. And start to work it out from there.

Replies are listed 'Best First'.
Re^2: accessing an anonymous array
by haukex (Archbishop) on Apr 13, 2020 at 10:14 UTC
    I am sorry to say that "anonymous array" is actually a misnomer. It's not an array, it's a reference to an array.

    Well, if we're going to be nitpicky, then that is not quite correct, and your examples aren't entirely equivalent. Although both $rs are references to arrays, in my @a = ('a', 'b', 'c'); $r = \@a;, it's not an anonymous array, since it has a name, @a (even if its scope is limited). In my $r = ['a', 'b', 'c'];, the array being referenced by $r is anonymous, as it never gets any name. So in the OP's example, it is in fact an anonymous array, albeit a reference to a reference to one.

      As soon as the scope is exited, the variable is gone, and the array ref is all that is left. From then on, it's an "anonymized array". The array ref is all that is left.