perl_引用1.doc_第1页
perl_引用1.doc_第2页
perl_引用1.doc_第3页
perl_引用1.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

引用 引用一律声明为标量类型(即$开头的命名变量),使用运算符取引用 对引用变量的修改等同于对引用指向实际数据的修改 取变量引用:my $scalar_r = $scalar; 取列表的引用:my $array_r = array; 取哈希的引用:my $hash_r = %hash; 通过引用解决列表无法嵌套的问题: my array1 = (10, 20, 30, 40, 50); my array2 = ( 1, 2, array1, 3, 4); 因为array1本质上只是一个标量,所以列表不会被扁平化,依旧保留了嵌套层次 对匿名列表的引用:将列表的()替换为:my $array_r = 1, 2, 3, 4, 5; 对匿名哈希的引用:将哈希的()替换为:my $hash_r = apple = pomme, pear = poire ; 对引用变量解引用通过$var_r实现 列表 my array = (1, 2, 3, 4, 5); my $array_r = array; my array2 = $array_r; #拷贝了数组 哈希与列表类似 对于数组引用,可以将$ref简记为$ref-,例如可以将$ref2简记为$ref-2,而将$ref21简记为$ref-2-1,并进一步简记为$ref-21 使用undef销毁一个引用:undef $ref; perl对于引用指向的数据维护一个引用计数,当计数减到0时引用指向的数据被销毁,内存空间被释放 使用引用使得表示复杂的数据结构成为可能。这些数据结构包括矩阵(多维数组)、链表、树、图等。 一些思考:C/C+的引用主要为了传地址。与C/C+中的指针、引用不同的是,perl引用除了传递地址外,还是perl中将标量(scalar)、列表(list)、哈希(hash)进行一般化(或者说统一)表示的机制,使用引用后,可以将标量、列表、哈希均表示为标量(因为地址本质上是一个无符号整型数,这一点与C中的void*有些类似)。通过引用,就可以解决perl中无法存储带有嵌套层次的列表、无法表示复杂数据结构的问题。 Perl引用分为直接引用和符号引用,每种Perl引用都有各自的特点和作用,这里向大家简单介绍一下Perl直接应用的概念,希望对大家学习有所帮助。 Perl直接引用 1、一般的标量Perl引用 如: sub add my($a,$b)=_; $a+; $b+; $a=1; $b=2; add($a,$b); print $a,$bn; 输出:2,3。 说明:取变量的Perl引用可以用“”符号。解Perl引用用“$”符号。 2、数组的Perl引用 数组的Perl引用和标量的Perl引用一样,在数组名前面加“”,只是在解Perl引用的时候,使用符号。如: abc=(1,2,3); $ref=abc; print “$refn”;输出1,2,3。 print “$ref0n”;输出1。 对数组的Perl引用主要用在解决向函数传递若干个数组的问题。在Perl中,如果向函数传递若干个数组,则他们会将这些数组展开到_数组中,并不能通过_这个数组来区分传递过来的参数。 如: sub add my(ref1,ref2)=_; print(“ref1:ref1n”); print(“ref2:ref2n”); a=(1,2,3); b=(1,2,3); ret=add(a,b); 实际输出的是:ref1:123123 ref2: 可以看到,在子函数add中,并没有区分传递过来的两个参数。那么如何向函数传递多个数组或哈希表呢? 解决的办法是使用数组Perl引用。如下这个例子说明了如何实现: sub add my result; my($ref1,$ref2)=_; while( $ref1 & $ref2 ) unshift result, pop($ref1)+pop($ref2); return result; a=(1,2,3); b=(1,2,3); ret=add(a,b); print retn; 输出:246 3、对哈希表的Perl引用 和数组类似,但是当解Perl引用时要使用$符号,如: %hash=(abc=123, def=456); $ref=%hash; print %$refn;输出:%HASH(0x83179b4) print $refabcn;输出:123 4、表的Perl引用 创建表的Perl引用将会把表中的最后一个值作为产生的标量: $reflist=($a,$b,$c); print $reflist.n; #输出$c的值。 $reflist=(1,2.30,40); print $reflist.n#输出40 5、创建匿名数组的Perl引用 $arrayreference=1,2,3; print $arrayreference0; #输出1 print $arrayreference-0; #输出1可以用箭头解Perl引用 当用pop从数组中取值时,数组的第一个元素会被弹出,但是如果用pop用于匿名数组时,可以实现取值而不影响原有数组,如: a=(1,2,3); $s=popa;#perl作为快来计算,而快在计算时将创建对匿名数组的Perl引用。 print “an”;#输出123 当反Perl引用数组Perl引用时,该结果将插入到字符串中,如:想实现输出uc函数的返回结果: print uc(abc)n; #输出uc(abc),并不能将abc转换成大写 print uc(abc)n #输出ABC,通过数组Perl引用实现大写转换。 可以通过$#$的方式取匿名数组的长度: $a=1,2,3,4; print $#$an;#输出3,(最后一个元素的下标) 6、创建匿名哈希表的Perl引用 如: $hashreference=Name=Sylvster,Gender=male; print $hashreference-Name; #输出Sylvester,等价于:$hashreferenceName; 如果需要用each遍历哈希表,则: while($key,$value)=each(%$hashrefere

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论