数组 – Perl数组与列表

前端之家收集整理的这篇文章主要介绍了数组 – Perl数组与列表前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在Perl中有两个数据结构:

数组:

my @array2 = ( "1","2","3");

for $elem (@array2) {
    print $elem."\n";
}

给我以下输出

1
2
3

和一个列表:

my @array = [ "1","3"];                                            

for $elem (@array) {
    print $elem."\n";
}

给出以下输出

ARRAY(0x9c90818)

显然,我想在这两种情况下迭代元素,但为什么第二个解决方案只给我这个数组的引用?

解决方法

Perl中的列表不是数据结构,它们是源代码中的位置,由围绕它们的上下文确定。列表基本上是Perl用来移动数据的瞬态结构。您使用Perl的所有语法与它们进行交互,但不能将它们用作数据类型。最接近列表的数据类型是数组。
my @var    =    (1,2,3);  # parens needed for precedence,they do not create a list
   ^ an array    ^ a list

say 1,3;
    ^ a list

say @var;
    ^ a list (of one array,which will expand into 3 values before `say` is called)

当你写[1,2,3]你正在做的是创建一个标量数组引用。该数组引用使用列表1,3初始化,它与创建命名的数组并引用它相同:

[1,3]   ~~   do {my @x = (1,3); \@x}

由于[…]结构创建一个标量,你应该保持它在一个标量:

my $array = [1,3];                                            

for my $elem (@$array) {   # lexical loop variable
    print $elem."\n";
}

因为你想对整个数组进行操作,而不仅仅是引用,你在$数组前放置一个@,它取消引用存储的数组引用。

猜你在找的Perl相关文章