zoukankan      html  css  js  c++  java
  • Perl--引用

      在C 里,间接的最常见的形式就是指针,它可以让一个变量 保存另外一个变量的内存地址。在 Perl 里,间接的最常
    见的形式是引用。
    
    
    创建引用:
    
    你可以用一个反斜杠创建一个指向任何命名变量或者子过程的引用。(你还可以把它用于一个匿名 标量值,比如 7
    或 "camel",尽管你通常并不需要这些东西。)乍一看,这个操作符的作用类似 C 里的 &(取址)操作符。
    下面是一些例子:
    $scalarref = $foo;
    $constref = 186_282.42;
    $arrayref = @ARGV;
    $hashref = \%ENV;
    $coderef = &handler;
    $globref = *STDOUT;
    
    
    8.3.7 闭合(闭包)
    
    我们早些时候谈到过用一个没有名字的 sub {} 创建匿名子过程。你可以把那些子过程看作是在 运行时定义,这就
    意味着它们有一个生成的时间和一个定义的地点。在创建子过程的时候,有些变量 可能在范围里,而调用子过程的
    时候,可能有不同的变量在范围里。
    先让我们暂时忘掉子过程,先看看一个指向一个词法变量的引用:
    {
    my $critter = "camel";
    $critterref = $critter;
    }
    $$critterref 的数值仍将是“camel”,即使在离开闭合的花括弧之后 $critter 消失了也如此。 但是 $critterref 也
    可以指向一个指向了 $critter 的子过程:
    {
    my $critter = "camel";
    $critterref = sub { return $critter };
    }
    
    [oracle@jhoa 2]$ cat 6.pl 
    {
    my $critter = "camel";
    $critterref = $critter;
    }
    print "$critter is $critter
    ";
    print "$critterref is $critterref
    ";
    
    [oracle@jhoa 2]$ perl 6.pl 
    $critter is 
    $critterref is SCALAR(0x10c1060)
    
    
    
    引用的本质是指针,存放的不是值,而是其他变量的地址。
    不管这个地址怎么使用,它还是一个简单变量,所以用$表示。使用时通过此地址访问变量的值。
    用创建变量 取变量地址
    
    [oracle@jhoa 2]$ cat a2.pl 
    {my $a = "hello world";$ra=$a;} print "$ra
    ";
    {my $a = "hello world";$ra=$a;} print "$$ra
    ";
    [oracle@jhoa 2]$ perl a2.pl 
    SCALAR(0xea9f030)
    hello world
    
    
    1.引用变量的销毁:
    [oracle@jhoa 2]$ cat a3.pl 
    {
     my $ra;
    {
     my $a = "hello world";
       $ra = $a;
    }
    print "$a is $a
    ";
    print "$ra is $$ra
    ";
    }
    print "$ra is $$ra
    ";
    [oracle@jhoa 2]$ perl a3.pl 
    $a is 
    $ra is hello world
    $ra is 
    

  • 相关阅读:
    poj 3243 Clever Y(BabyStep GiantStep)
    poj 2417 Discrete Logging
    poj 3481 Double Queue
    hdu 4046 Panda
    hdu 2896 病毒侵袭
    poj 1442 Black Box
    hdu 2815 Mod Tree
    hdu 3065 病毒侵袭持续中
    hdu 1576 A/B
    所有控件
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13351970.html
Copyright © 2011-2022 走看看