Perl:字符串后面的双方括号的含义?

Perl:字符串后面的双方括号的含义?,perl,square-bracket,Perl,Square Bracket,我不理解Perl中一段看似基本的代码,如下所示: $line[$k][1] 双方括号的含义是什么 很抱歉,如果已经有人问过这个问题,或者这个问题非常基本,可以在每本Perl初学者手册中找到。我在任何地方都找不到它这意味着您正在使用二维数组 #!/usr/bin/env perl use strict; use warnings; my @stuff = ( [ 1, 2, 3, 4 ], [ 5, 6, 7, 8 ], ); print $stuff[1][2];

我不理解Perl中一段看似基本的代码,如下所示:

$line[$k][1]
双方括号的含义是什么


很抱歉,如果已经有人问过这个问题,或者这个问题非常基本,可以在每本Perl初学者手册中找到。我在任何地方都找不到它

这意味着您正在使用二维数组

#!/usr/bin/env perl

use strict;
use warnings;

my @stuff = ( 
   [ 1, 2, 3, 4 ],
   [ 5, 6, 7, 8 ],
 );

 print $stuff[1][2]; 
 #prints '7'

[…]
是数组索引。如果你有两个,这意味着这是一个数组的数组。在您的示例中,您将获得
@line
$k
第四个元素的第二个元素(索引从0开始)

你认为它是一个字符串,这可能是代码写得不太好的一个标志,因为应该有一行代码沿着
my@line的行说些什么


确保代码有
使用严格
使用警告在顶部,这应该会引发代码的任何问题。

这意味着您拥有的不是“字符串”。它是一个名为
@line
的数组,
@line
中的每个元素都是对另一个数组的引用

当访问Perl数组中的单个元素时,sigil将从
@
(表示多个值)更改为
$
(表示单个值)。因此,要在名为
@line
的数组中查找索引为
$k
的元素,可以使用:

$line[$k]
但在您的示例中,
$line[$k]
包含对另一个数组的引用。为了从数组引用获取引用数组的一个元素,我们使用
->[…]
语法。因此,由
@line
$k
第四个元素引用的数组的第二个元素由以下公式给出:

$line[$k]->[1];
在Perl中,我们有一个规则,当两组数组(或散列)查找括号仅由一个解引用数组分隔时,我们可以忽略该箭头。因此,我前面的示例可以简化为:

$line[$k][1];

它是二维数组的一个元素。这是一个数组,对于元素,它有数组引用(比如
my@ary=([1,2],[4,5]);
)。然后,您需要的是arrayref的
1
-索引元素,它是数组的
@line
$k
-索引元素。完整语法为
$line[$k]->[1]
,但(此处)箭头可能会被删除。在我的
@ary
示例中
$ary[1][1]
5