加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

数组 – Perl数组与列表

发布时间:2020-12-15 21:24:57 所属栏目:大数据 来源:网络整理
导读:我在Perl中有两个数据结构: 数组: my @array2 = ( "1","2","3");for $elem (@array2) { print $elem."n";} 给我以下输出: 123 和一个列表: my @array = [ "1","3"]; for $elem (@array) { print $elem."n";} 给出以下输出: ARRAY(0x9c90818) 显然,我
我在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";
}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读