• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

perl的引用和-

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

常见数据类型的引用定义:

数据类型           定义      举例

标量变量           \$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};


完!

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
一个perl的面向对象编程例子发布时间:2022-07-22
下一篇:
Perl面向对象(3):解构——对象销毁发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap