perl引用的相关知识分享

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


my $student_properties_of = {
    'zdd' => {
        'age' => 30,
        'hight' => 170,
        'id' => '001',
    },
    'autumn' => {
        'age' => 27,
        'hight' => 165,
        'id' => '002',
    }
} ;

引用的赋值

$aref2 = $aref1; 将使得$aref2和$aref1指向同一个数组,如果想将$aref1指向的数组拷贝一份给$aref2的话,使用下面的方法,[]里面对数组进行解引用,而[]以解引用后的数组为内容生成了一个新的匿名数组,又赋值给$aref2。
$aref2 = [@{$aref1}];

注意:不能使用下面的形式,外层的[]是不可缺少的。由于=左边是标量,所以右边的数组会被解释为标量环境,得到的是数组元素个数,而不是元素本身。但是如果加上[]就可以了,这样perl知道这是一个匿名数组的赋值。
$aref2 = @{$aref1};

判断一个变量是否是引用

使用ref函数即可,如果变量是引用则返回真,否则返回假。实际上它更智能,它会返回引用对应的类型,比如HASH或者ARRAY。


my $aref1 = [1, 2, 0] ;
print ref $aref1, "n" ; #输出 ARRAY
if (ref $aref1) {
    print "truen" ; #输出 true
}

判断两个引用是否指向同一个目标

可以用eq,这将以字符串的形式判断,也可以使用==


my $aref1 = [1, 2, 0] ;
my $aref2 = $aref1 ;
print $aref1, "n" ;
print $aref2, "n" ;
if ($aref1 eq $aref2) {
    print "reference equaln" ;
}
if($aref1 == $aref2) {
    print "reference equaln" ;
}

产生如下输出:
ARRAY(0x248bec)
ARRAY(0x248bec)
reference equal (eq)
reference equal (==)