Perl--引用<1>
发布时间:2020-12-15 23:50:14 所属栏目:大数据 来源:网络整理
导读:在C 里,间接的最常见的形式就是指针,它可以让一个变量 保存另外一个变量的内存地址。在 Perl 里,间接的最常见的形式是引用。创建引用:你可以用一个反斜杠创建一个指向任何命名变量或者子过程的引用。(你还可以把它用于一个匿名 标量值,比如 7或 "camel"
在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 $crittern"; print "$critterref is $critterrefn"; [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 "$ran"; {my $a = "hello world";$ra=$a;} print "$$ran"; [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 $an"; print "$ra is $$ran"; } print "$ra is $$ran"; [oracle@jhoa 2]$ perl a3.pl $a is $ra is hello world $ra is (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读