Perl 中的列表不是数据结构,它们是源代码中的位置,由它们周围的上下文决定。列表基本上是 Perl 用于移动数据的瞬态结构。您可以使用 Perl 的所有语法与它们交互,但不能将它们作为数据类型使用。最接近列表的数据类型是数组。
my @var = (1, 2, 3); # parens needed for precedence, they do not create a list
^ an array ^ a list
say 1, 2, 3;
^ a list
say @var;
^ a list (of one array, which will expand into 3 values before `say` is called)
当你写的时候[1, 2, 3]
您正在做的是创建标量数组引用。该数组引用是用列表初始化的1, 2, 3
,它与创建命名数组并引用它相同:
[1, 2, 3] ~~ do {my @x = (1, 2, 3); \@x}
自从[...]
构造创建一个标量,您应该将其保存在标量中:
my $array = [1, 2, 3];
for my $elem (@$array) { # lexical loop variable
print $elem."\n";
}
由于您想要对整个数组进行操作,而不仅仅是引用,因此您可以放置一个@
在......面前$array
它取消引用存储的数组引用。