[Perl系列—] 2. Perl 中的引用用法
来源:互联网 发布:unity3d 2d 编辑:程序博客网 时间:2024/05/01 13:55
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" ;
前言
- [Perl系列—] 2. Perl 中的引用用法
- perl函数中的传引用用法
- Perl中的直接引用
- Perl中的“引用”
- perl中的引用
- Perl中的引用
- Perl中的向后引用
- perl引用
- Perl引用
- perl 引用
- perl 引用
- perl 引用
- perl中的命令行开关用法
- hash 在 perl 中的用法
- perl ->用法
- Perl教学 第十二篇 Perl5中的引用
- Perl教学 Perl5中的引用(指针)
- Perl 引用变量传入函数中的行为
- linux文件监控(网站拷贝英文仅转存浏览)
- 赵雅智_BroadcastReceiver
- matlab 点除与除的区别
- Android资源之图像资源(状态图像资源)
- SQL_数据库基础之级联删除和级联更新
- [Perl系列—] 2. Perl 中的引用用法
- java自学之路-----对于之前学习的总结以及接下来的计划
- 第105天
- 插入排序
- ovirt-engine搭建
- 使用Visual Studio 创建新的Web Part项目
- ovirt-engine详细安装
- ovirt-engine搭建问题总结
- 工作记录--make clean