常见数据类型的引用定义: 数据类型 定义 举例 标量变量 \$Var $Pointer = \$Var 数组 \@Array $Pointer = \@Array 哈希变量 \%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;
翻译自: http://www.thegeekstuff.com/2010/06/perl-array-reference-examples/ http://www.thegeekstuff.com/2010/06/perl-hash-reference/
reference是另一个变量的地址。reference可以指向array,hash,或perl代码段。reference使perl代码运行更快。
一 array的reference和dereference
1)array的reference 正常地,我们存储list的元素在array中如下:@array = (“one”,”two”,”three”,”four”,”five”); 使用\来将array的地址赋给reference变量,如下:$array_ref = \@array; 如果你print $array_ref,将显示如下:ARRAY(0x1a2b3c); array的reference可以被传递给subroutine,如下: 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其实是构造复杂数据结构的本质。
我们也可以将匿名的array赋给reference如下:$array_ref = [ 11,2,3,45]
2)array的reference的dereference 在subroutine中,我们可以使用如下的方法来dereference array的reference:@{ $array_ref }; 取得第一个元素如下:$ { $array_ref }[0]; 或者可以使用perl的特殊符号来使用array的reference,如下: # Get all the elements of @numbers array. @ { $_[0] }
# Get a particular element. This gives the first element of the array. $ { $_[0] } [0]
注意,如果只是dereference一个简单的scalar变量,可以忽略括号,如下: @$array_ref # same as @{ $array_ref }
$$array_ref # same as $ { $array_ref }
$_[0] # not a simple scalar variable and this cant be dereferenced,
二 hash的reference和dereference
hash的reference和dereference与array的一样。
hash的reference如下: %author = ( 'name' => "Harsha", 'designation' => "Manager" );
$hash_ref = \%author;
dereference后访问元素如下: $name = $ { $hash_ref} { name }; 等价于 my $name = $hash_ref->{name};
访问所有的keys如下: my @keys = keys % { $hash_ref }; 等价于my @keys = keys %author;
如果是简单scalar变量,可以忽略括号,如下:my @keys = keys %$hash_ref; $name = $$hash_ref{name};
匿名hash的reference如下: my $hash_ref = { 'name' => "Harsha", 'designation' => "Manager" };
使用如下:$name = $ { $hash_ref} { name };
三 对reference变量使用-> 来获得属性
my $name = $hash_ref->{name};
完!
|
请发表评论