perl中列表不能嵌套,只能通过引用的方式构建复杂的结构。引用其实就是c中的指针,只不过perl中对指针,也就是一个地址的声明和取值有自己的一套方法。
1、先复习普通标量的引用方法:
[vagrant@bio ~]$ cat t1.pl use v5.26; use warnings; my $a=123; my $p=$a; say $a; say $p; say ${$p}; say $$p; say "=========="; my @arr=(10,11,12); my $pArr=@arr; say @arr; say $pArr; say ${$pArr}[0]; # say $pArr[0]; say $pArr->[0]; [vagrant@bio ~]$ perl t1.pl 123 SCALAR(0xd8f6d0) 123 123 ========== 101112 ARRAY(0xd9c7f0) 10 10
2、以一个数组说明:
[vagrant@bio ~]$ cat t1.pl use v5.26; use warnings; my @arr1=(1,2,3); #声明一个数组 my @arr2=(4,5,6); #声明另一个数组 $arr1[3]=@arr2; #把数组arr1中下标为3的值,存放一个引用标量,该标量存放对数组arr2的引用 say @arr1; #打印数组1 [vagrant@bio ~]$ perl t1.pl 123ARRAY(0x1e47798)
3、如果想对数组中的引用中的结构(这里是另一个数组),进行取值,有3中方法。
[vagrant@bio ~]$ cat t1.pl use v5.26; use warnings; my @arr1=(1,2,3); my @arr2=(4,5,6); $arr1[3]=@arr2; say @arr1; #say $arr1[3] #错误 say $arr1[3][0]; #第一种最简单,好像一个2维数组 say ${$arr1[3]}[0]; #标准的引用调用方法 say $arr1[3]->[0]; #瘦箭头引用方法 [vagrant@bio ~]$ perl t1.pl 123ARRAY(0x14627d8) 4 4 4 [vagrant@bio ~]$