perl引用的相关知识分享

2019-10-01 13:03:23王振洲

%h          %{$href}           A hash
   keys%h      keys%{$href}        Get the keys from the hash
   $h{'red'}      ${$href}{'red'}       An element of the hash
   $h{'red'} =17   ${$href}{'red'} =17    Assigning an element

注意:当{}内部是$var的形式时,{}是可以省略的,也就是说@{$aref}等价于@$aref,不过初学最好养成使用{}的习惯。

方法三
前两种方法比较繁琐,这种很简洁,就是使用箭头符号->


$aref->[]  数组解引用
$href->{}  哈希解引用
$href->()  子过程解引用
$aref->[0] =3 ;
$href->{name} ="autumn" ;
$sref=2 ;
也可以将引用赋值给其他变量
my$aref1=$aref ;
my$href1=$href ;
my$scalar1=$scalar ;

解引用总结

my $scalar = 1 ;
my @array = (1, 2, 3) ;
my %hash = ('zdd' => 30, 'autumn' => 27) ;
my $sref = $scalar ;   # scalar reference
my $aref = @array ;    # array reference
my $href = %hash ;     # hash reference
# 方法一
print $$sref, "n" ;
print @$aref, "n" ;
print %$href, "n" ;
print $$aref[2], "n" ;
print $$href{'zdd'}, "n" ;
# 方法二
print ${$sref}, "n" ;
print @{$aref}, "n" ;
print %{$href}, "n" ;
print ${$aref}[2], "n" ;
print ${$href}{'zdd'}, "n" ;
# 方法三,不适用于标量
print $aref->[0], "n" ;
print $href->{'zdd'}, "n" ;
数组的数组
@a = (
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
)

我们知道[1, 2, 3]定义了一个(1, 2, 3)的匿名引用,所以数组a实际上包含三个元素,每个元素是一个引用,该引用指向一个数组,所以我们可以用下面的方法来访问数组元素(注意,下标从0开始)

$a[1][2]表示第二行第三列元素6,也可以写成$a[1]->[2],不过很少有人这么写。还可以写成${$a[1]}[2],几乎没人这么写!

多维数组的另一个写法如下:


my $aref = [1, [2, 3], [4, 5, 6]] ;
print $aref->[0] , "n" ; #1
print $aref->[1][1], "n" ; #3
print $aref->[2][0], "n" ; #4

这两者的区别有以下几点:
1)、前者是真正的数组,所以定义变量是使用@,后者是指向匿名数组的引用,所以定义的时候使用$
2)、前者的数组元素是匿名数组,而外层数组则是实体数组,后者无论元素还是外层数组都是匿名数组
3)、前者可以用$a[x][y]的形式访问,而后者只能用解引用的方式访问,即$a->[x][y]的形式。

数组的哈希,哈希的数组,哈希的哈希

也就是哈希表中的每个元素也是一个哈希表,比如一个学生集合组成的哈希,其key是学生名字(唯一),其值是每个学生的属性,比如年龄,身高及学号等。