zoukankan      html  css  js  c++  java
  • [Perl系列—] 2. 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" ; 




    前言

  • 相关阅读:
    ant 软件包不存在报错
    在 Internet Explorer 中使用 Windows 窗体控件
    智能客户端
    Back to the Future with Smart Clients
    "Automation 服务器不能创建对象" 的解决方案
    Top 10 Reasons for Developers to Create Smart Clients
    Updater Application Block for .NET
    Smart Client Application Model and the .NET Framework 1.1
    Security and Versioning Models in the Windows Forms Engine Help You Create and Deploy Smart Clients
    智能客户端技术总结(二)
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6955475.html
Copyright © 2011-2022 走看看