[Perl系列—] 2. Perl 中的引用使用方法
发布日期:2021-06-24 06:21:19 浏览次数:5 分类:技术文章

本文共 2262 字,大约阅读时间需要 7 分钟。

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 referencemy $aref = \@array ;    # array referencemy $href = \%hash ;     # hash reference#使用引用print $$sref, "\n" ;  print @$aref, "\n" ;  print %$href, "\n" ;  print $$aref[2], "\n" ;print $$href{'name'}, "\n" ;

方法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" ;

前言

转载于:https://www.cnblogs.com/jhcelue/p/6955475.html

转载地址:https://blog.csdn.net/weixin_30896763/article/details/94822198 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:算法导论--装备线调度(升序&&降序输出)
下一篇:backbone源码学习笔记(一)

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年03月31日 05时29分12秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章