[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, "\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" ;
前言
[Perl系列—] 2. Perl 中的引用使用方法的更多相关文章
- 错误 1 error LNK2019: 无法解析的外部符号 __imp__pthread_create,该符号在函数 _main 中被引用 解决方法
晚上花几分钟在windows下测了下pthread的用法,出现错误 1 error LNK2019: 无法解析的外部符号 __imp__pthread_create,该符号在函数 _main 中被引用 ...
- 如何在JavaScript中正确引用某个方法(bind方法的应用)
在JavaScript中,方法往往涉及到上下文,也就是this,因此往往不能直接引用,就拿最常见的console.log("info…")来说,避免书写冗长的console,直接用 ...
- 关于“无法解析的外部符号”和“该符号在函数_wmain 中被引用”的问题
在VS2008和opendv的环境下: error LNK2019: 无法解析的外部符号_cvDestroyWindow,该符号在函数_wmain 中被引用 error LNK2019: 无法解析的外 ...
- error LNK2019: 无法解析的外部符号 __imp_recv,该符号在函数 evthread_notify_drain_default 中被引用
在Windows系统中使用libevent时,编译报错:error LNK2019: 无法解析的外部符号 __imp_recv,该符号在函数 evthread_notify_drain_default ...
- 【转载】Perl中的引用
为什么使用引用? 在perl4中,hash表中的value字段只能是scalar,而不能是list,这对于有些情况是很不方便的,比如有下面的数据: Chicago, USAFrankfurt, Ger ...
- perl 中的引用
perl 语言中的引用共分为两类: 声明引用时只需要在对象的前面加上反斜杠 第一列是数组的引用: 代码示例: , , ); my $array_ref = \@array; 第二种是哈希的引用 代码示 ...
- Perl系列文章
0.Perl书籍推荐 Perl书籍下载 密码:kkqx 下面是一些我学习Perl过程中读过完整的或部分章节的觉得好的书. 入门级别1:<Perl语言入门>即小骆驼 入门级别2:<In ...
- PHP-之POSIX系列函数和兼容Perl系列函数比较
PHP有两种正则系列函数 POSIX 系列和兼容Perl系列的函数 在PHP大于5.3使用POSIX系列函数会报E_DEPRECATED 错误, POSIX系列函数在大于5.3版本不建议使用,PHP7 ...
- [码海拾贝 之Perl]在字符串数组中查找特定的字符串是否存在
前言 检索一个字符串是否存在于一个数组中, 最主要的想法应该就是对数组进行循环, 逐个推断数组的每一个元素值和给定的值是否相等. (在Java语言还能够把数组转成 List , 在 list 中直接有 ...
随机推荐
- js数组并集,交集,差集
js数组并集,交集,差集的计算方式汇总 一. new Set 方式实现 这种方式实现起来比较简单,原理就是参考new Set可以去重的功能 ,关于去重可以点击 https://www.haorooms ...
- thinkphp 多个字段的不同关系的查询条件实现 .
tp的$map不同条件默认是 and ,如果要用or<><><><>如下 例如查询Stu表中年龄大于18,或者身高低于180cm的男性(1为男性),(例 ...
- 模式匹配的KMP 算法
常见的字符串匹配时,模式串长度为n,源串长度为m,则从头匹配,两个指针i指向源串,j指向模式串,如遇到不同则回溯使j=0,这样就要反复匹配会使效率变低. 因为在如今i之前 的模式串与匹配串的匹配是同样 ...
- [Android] Android开发优化之——对界面UI的优化(1)
在Android应用开发过程中,屏幕上控件的布局代码和程序的逻辑代码通常是分开的.界面的布局代码是放在一个独立的xml文件中的,这个文件里面是树型组织的,控制着页面的布局.通常,在这个页面中会用到很多 ...
- [Android] Android开发优化之——从代码角度进行优化
通常我们写程序,都是在项目计划的压力下完成的,此时完成的代码可以完成具体业务逻辑,但是性能不一定是最优化的.一般来说,优秀的程序员在写完代码之后都会不断的对代码进行重构.重构的好处有很多,其中一点,就 ...
- NOIP2017提高组模拟赛 10 (总结)
NOIP2017提高组模拟赛 10 (总结) 第一题 机密信息 FJ有个很奇怪的习惯,他把他所有的机密信息都存放在一个叫机密盘的磁盘分区里,然而这个机密盘中却没有一个文件,那他是怎么存放信息呢?聪明的 ...
- bzoj3262: 陌上花开(cdq分治+树状数组)
3262: 陌上花开 题目:传送门 题解: %%%cdq分治 很强大的一个暴力...感觉比分块高级多了 这道题目就是一个十分经典的三维偏序的例题: 一维直接暴力排序x 二维用csq维护y 三维用树状数 ...
- bzoj1082: [SCOI2005]栅栏(二分答案搜索判断)
1082: [SCOI2005]栅栏 题目:传送门 题解: 是不是一开始在想DP?本蒟蒻也是qwq,结果很nice的错了ORZ 正解:二分+搜索 我们可以先把两种木材都进行排序,那么如果需要的最大木材 ...
- nyoj--1239--引水工程(最小生成树)
引水工程 时间限制:2000 ms | 内存限制:65535 KB 难度: 描述 南水北调工程是优化水资源配置.促进区域协调发展的基础性工程,是新中国成立以来投资额最大.涉及面最广的战略性工程,事 ...
- hihocoder 1407 重复旋律2
思路: 二分一哈答案 height分个块 //By SiriusRen #include <cstdio> #include <cstring> #include <al ...