• 热门专题

Perl中的引用用法

作者:  发布日期:2014-06-25 18:30:20
Tag标签:Perl中的引用用法  
  • Perl 中的引用,为什么要使用引用?

    对于熟悉C语言的开发者来说, 指针这个概念一定不陌生。

    Perl 的引用就是指针,可以指向变量、数组、哈希表甚至子程序。

    Perl5中的两种Perl引用类型为硬Perl引用和符号Perl引用。符号Perl引用含有变量的名字,它对运行时创建变量名并定位很有用,基本上,符号Perl引用就象文件名或UNIX系统中的软链接。而硬Perl引用则象文件系统中的硬链接。

    Perl4只允许符号Perl引用,给使用造成一些困难。例如,只允许通过名字对包的符号名哈希表(名为_main{})建立索引。Perl5则允许数据的硬Perl引用,方便多了。
    硬Perl引用跟踪Perl引用的计数,当其数为零时,Perl自动将被Perl引用的项目释放,如果该项目是对象,则析构释放到内存池中。Perl本身就是个面向对象的语言,因为Perl中的任何东西都是对象,包和模块使得对象更易于使用。

     

    那在什么状况下会使用到引用呢?

    在perl4中,hash表中的value字段只能是scalar,而不能是list,这对于有些情况是很不方便的,比如有下面的数据:

    Chicago, USA
    Frankfurt, Germany
    Berlin, Germany
    Washington, USA
    Helsinki, Finland
    New York, USA

    我们想要按国家将城市分类,每个国家后面对应城市列表,如果用perl4来做,必须将城市列表组合成字符串才行,如果用perl5就可以用引用来做,有了引用,就可以构造复杂的hash结构,就可以用列表作为hash的值了。

     

    定义引用

    知道了引用的作用,那么如何来定义一个引用呢?

    方法1: 使用斜线

    在变量前面加上一个

    对于数组变量的引用:

     

    my @array = (1,2,3);
    my $arrayref = @array;

    对于哈希变量的引用

     

     

    my %hash = ("name"=>"oscar999","age"=>30);
    my $hashref = %hash;

    对于标量的引用

     

     

    my $scarlar = 1;
    my $scarlarfef = $scarlar;

    方法2. 匿名引用 [] 或 {}

     

    匿名引用就是不定义变量,

    对于匿名数组来说,直接用中括号 [] 来定义引用

     

    my $arrayref = [1,2,3];
    以上就是定义一个匿名数组。

     

    使用这种方式也可以在匿名数组中套匿名数组

     

    my $arrayref = [
            [1, 2, 3],
            [4, 5, 6],
            [7, 8, 9]
    ];

     

    匿名哈希引用用 {} 定义

     

    my $href = {US=>4,CN=>6};

     

     

    使用引用

    定义了引用, 如何使用呢?

    方法1: 与普通变量访问相比, 多加一个 $

    这个概念和C 和类似

     

    #定义变量
    my $scalar = 1 ;
    my @array = (1, 2, 3) ;
    my %hash = ("name"=>"oscar999","age"=>30);
    
    #定义引用
    my $sref = $scalar ;   # scalar reference
    my $aref = @array ;    # array reference
    my $href = %hash ;     # hash reference
    
    #使用引用
    print $$sref, "
    " ;  
    print @$aref, "
    " ;  
    print %$href, "
    " ;  
    print $$aref[2], "
    " ;
    print $$href{'name'}, "
    " ;

    方法2 与普通变量访问相比, 多加一个 $

    数组的使用:

     

       @a        @{$aref}         An array
       reverse@a      reverse @{$aref}    Reverse the array
       $a[3]      ${$aref}[3]       An element of the array
       $a[3] =17;      ${$aref}[3] =17    Assigning an element
    

     

    哈希的使用:

     

       %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,不过最好是加上{}。

     

    方法3: 使用箭头符号 -> 这种用法看起来比较简洁

     

    $aref->[]  数组解引用

    $href->{}  哈希解引用

    $href->()  子过程解引用

    看看例子:

     

    $aref->[0] =3 ; 
    $href->{name} ="autumn" ; 

     

    前言

延伸阅读:

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规