【发布时间】:2015-05-14 22:56:13
【问题描述】:
我正在考虑如何通过符号$ 引用 Perl 数组中的元素。
最低代码
my @x = @{ $_[0] };
for(my $i=0; $i<$#x; $i++){
print $x[$i];
}
您将数组初始化为@x,这是一个数组。
您在 for 循环中通过 $x[$i] 打印出数组中的每个项目。
我认为当您通过@x 初始化数组并通过$#x 获取其大小时,这有点令人困惑。
为什么$x可以引用Perl数组?
【问题讨论】:
-
$#x是 NOT 数组的大小。它是数组最后一个元素的索引。数组的大小是@x在标量上下文中评估。另外,my $x = shift; print $x->[$_] for 0 .. $#$x;打印数组的元素而不创建副本。 -
@SinanÜnür 所以索引可以是 Perl 中的标量以外的东西。对吗?
-
索引强加标量上下文。当您编写
$ary[ ... ]时,[ ]之间的任何内容都会在标量上下文中进行评估。例如,由于自动激活,$ary[ @ary ]将始终为undef。在 C 中,它会访问越界的内存位置并导致未定义的行为。 -
@SinanÜnür 所以
$#x应该通过数组的最后一个元素对应数组的大小。任何情况下编号之间的差距?可能吗? -
$#x是最后一个索引 --- 不是数组的大小。我不知道这可以说得清楚多少。