zoukankan      html  css  js  c++  java
  • perl的引用和>

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

    数据类型           定义      举例

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


    完!

     
  • 相关阅读:
    React Children 使用
    Redux 中间件和异步操作
    Redux 核心概念
    React 的setState 异步理解
    JS 中类型和类型转换
    ES6 新增集合----- Set 和Map
    ES6 新增基本数据类型Symbol
    ES6 解构赋值
    ES6 对象增强
    ES6 中的let 和 const
  • 原文地址:https://www.cnblogs.com/itech/p/2023491.html
Copyright © 2011-2022 走看看