Perl:字符串后面的双方括号的含义?
我不理解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];
$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
。