perl-总结reference

无疑,reference和deference是目前学perl中遇到的第二个麻烦。第一个是变量符号的使用,之前学的时候也是似懂非懂,迷迷糊糊的。百度看了许多教程,发现好多教程也没将明白。我也学了这么多天了,天天在想着如何理解使用它,现在算是比较懂了,所以理清一下思路

创建reference的三种方式

  1. 使用\符号来创建reference
  2. 数组使用[],哈希使用{}来创建匿名reference
  3. 使用->来创建reference
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/perl

@simple = (1..5);
$simpleref = \@simple;
print ref($simpleref),"\n";
print $simpleref,"\n";
print $simpleref -> [0],"\n";
print @$simpleref,"\n";

$list = [1..5];
print ref($list),"\n";
print $list,"\n";
print $list -> [0],"\n";
print @$list,"\n";

$array -> [0] = 1;
@$array[1] = 2;
@$array[2] = 3;
@$array[3] = 4;
@$array[4] = 5;
print ref($array),"\n";
print $array,"\n";
print $array-> [0],"\n";
print @$array,"\n";
1
2
3
4
5
6
7
8
9
10
11
12
ARRAY
ARRAY(0x5646b50e5470)
1
12345
ARRAY
ARRAY(0x5646b5107ec0)
1
12345
ARRAY
ARRAY(0x5646b5112710)
1
12345

dereference的唯一方式

一个reference创建后,可以通过reference去取到某一个值,但是要取到全部的值,就的dereference了,并且只有这一种方式,便是在reference前加@%

区别:数组用@,哈希用%

dereference后的好处就是可以像使用数组或者哈希变量那样来操作数据,它的使用和变量一样

这里需要注意的地方就是使用符号->创建的reference,由于创建时最多只能指定一个值,然后这个reference就被创建了出来,由于reference的名字不能重复,所以之后添加数据需要先dereference

用reference取值的唯一方式

由于reference是一个内存地址,所以取值方式比较特殊,如果不想通过dereference后去取值的话,则使用符号->来取值。

使用->取值时,数组指定index索引,哈希指定key键

用到->的地方

  1. 在创建reference的时候,用的比较多的方式就是通过->符号来创建
  2. 所有方式创建的reference,需要通过reference来取值的时候需要用到->