Arrays 如何取消对数组数组的引用?

Arrays 如何取消对数组数组的引用?,arrays,perl,reference,Arrays,Perl,Reference,我正在开发一个Perl Dancer2 Web应用程序,无意中发现了这样一种情况,即我有一个数组,其中包含一个位于位置2的数组。我将对该数组的引用传递给子数组,然后迭代该数组(包含数组) 当我尝试使用@$\u2]获取foreach()循环中最内层的数组时,我得到一个错误: 不是标量引用 我可以通过以下方式轻松解决此问题: my $ref = $$_[2]; print "@$ref\n"; 但我想知道为什么第一种方法不起作用 请看我的最小示例: my @x = (["a", "b", [1,

我正在开发一个Perl Dancer2 Web应用程序,无意中发现了这样一种情况,即我有一个数组,其中包含一个位于位置2的数组。我将对该数组的引用传递给子数组,然后迭代该数组(包含数组)

当我尝试使用
@$\u2]
获取
foreach()
循环中最内层的数组时,我得到一个错误:

不是标量引用

我可以通过以下方式轻松解决此问题:

my $ref = $$_[2];
print "@$ref\n";
但我想知道为什么第一种方法不起作用

请看我的最小示例:

my @x = (["a", "b", [1, 2], "c"],
         ["x", "y", [8, 9], "z"]);
my $y = \@x;

foreach (@$y) {
#   print "@$$_[2]\n"; #produces error

    my $z = $$_[2];
    print "@$z\n"; #works
}

你知道这是怎么回事吗?

看看
->
操作符。问题可能在于括号。毕竟,当你说
$$\u2]
时,你的意思是:
${$\u}[2]
还是
{$$\u}[2]

类似的内容可能更清晰(假设您想要1,2和8,9)


查看
->
操作符。问题可能在于括号。毕竟,当你说
$$\u2]
时,你的意思是:
${$\u}[2]
还是
{$$\u}[2]

类似的内容可能更清晰(假设您想要1,2和8,9)

您需要大括号:

@{$$_[2]}
或者,更具可读性

@{ $_->[2] }
原始的
@$$\u2]
被解释为

@{ $$_ }[2]
比照

您需要大括号:

@{$$_[2]}
或者,更具可读性

@{ $_->[2] }
原始的
@$$\u2]
被解释为

@{ $$_ }[2]
比照


你可能有一个答案。但我很想知道你是从哪里学来这种可怕的引用语法的。大多数地方只是在向可读性更高(也不那么混乱)的
$\u->[2]
语法传递的过程中提到它。@DaveCross我想这是我在阅读perldoc中看到的第一个关于引用的语法:我觉得这有点直观。。。就我个人而言,我并不觉得
$$\u2]
$\u->[2]
更让人困惑,而是一个你有答案的可能重复的问题。但我很想知道你是从哪里学来这种可怕的引用语法的。大多数地方只是在向可读性更高(也不那么混乱)的
$\u->[2]
语法传递的过程中提到它。@DaveCross我想这是我在阅读perldoc中看到的第一个关于引用的语法:我觉得这有点直观。。。就我个人而言,我并不觉得
$$\u2]
$\u->[2]
更让人困惑,而是哈比托克的问题,明白了!谢谢:)好的,明白了!谢谢:)