一、引用
常见数据类型的引用定义:
数据类型 定义 举例
标量变量 \$Var $Pointer = \$Var
数组 \@Array $Pointer = \
哈希变量 \%Hash $Pointer = \%Hash
文件句柄 \*FILEHANDLE $Pointer = \
常量 \常量 $Pointer = \3.1415926
子程序 \&SubRoutine $Pointer = \&SubRoutine
匿名数组 [ LIST ] $Pointer = [ “Smith”,“Jack”,“Jimmy”,“ZhaZha”]
匿名哈希变量 { Key=>Value } $Pointer = { Key1=>Value1,Key2=>Value2}
匿名子程序 sub {} $Pointer = sub { printf( “Hello,Perl World\n”);}
对象引用 bless $self;
reference是另一个变量的地址。reference可以指向array,hash,或perl代码段。reference使perl代码运行更快。
二、数组的引用
1)array的reference
$array_ref = \@array;print $array_ref;#显示如下ARRAY(0x1a2b3c);sub add_numbers{ my $array_ref= shift;}@numbers = (11,2,3,45);$array_ref = add_numbers(\@numbers);
以上代码中,需要对array的reference进行dereference,然后才可以使用array中的元素。
以下是传递array的reference到subroutine的优点:
*如果array传递给subroutine,perl将整个array重新copy到@_中,当array比较大时,将非常低效;
*当我们需要在subroutine中修改原来的array时,需要传递array的reference;
*reference其实是构造复杂数据结构的本质。
2)array的reference的dereference
在subroutine中,我们可以使用@{$array_ref}来dereference;取得第一个元素${$array_ref}[0];
如果只是dereference一个简单的scalar变量,可以忽略括号,如下:
@$array_ref #same as @{$array_ref}
$$array_ref #same as ${$array_ref}
三、hash的reference和dereference
%author = (
'name'=>'Harsha',
'designation' => 'Manager'
);
$hash_ref = \%author;
$name = ${$hash_ref}{name}; #same as my $name = $hash_ref->{name}
my @keys = keys%{$hash_ref}; #same as my @keys = keys%author;
my $hash_ref = {
'name' =>"coco",
'designation' => 'Manager'
};#匿名引用