perl24小时自学通13引用与结构_第1页
perl24小时自学通13引用与结构_第2页
perl24小时自学通13引用与结构_第3页
perl24小时自学通13引用与结构_第4页
免费预览已结束,剩余8页可下载查看

下载本文档

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

文档简介

1、如果Perl是你使用的第一个编程语言,那N本学时将会使你感到颇有t趣2在语言中,你会发一个概念s一数据实际N可是对一2有时称指针在pascal或C语言中,有时种技术称如果Perl是你使用的第一个编程语言,那N本学时将会使你感到颇有t趣2在语言中,你会发一个概念s一数据实际N可是对一2有时称指针在pascal或C语言中,有时种技术称在汇编语言中则根本没有指针的概念在BASIC或Java中2如果你前未使用等概念,那N可能必须多次阅读本学时讲解的某些部V1指针O清Perl_拥有些特殊类型的值,O过在 Perl中,它们都称2在 Perl中可于许多目的,但在本学时中,你要学的是如何使来调用带有多个参数的

2、复杂函数如何创建复杂的数据类型,如列表的列表2的一本书2卡片可指明本书是什N类型的书比如小说1非小说1参考书等,并指明本书放在什N位置2,它们是O种类的用,并甚可参中的v他卡片Perl类似卡,可指向各数据能够知道它指向的是何种类别的数据如标量1数或哈希,_知道些数据在什N地方可被拷贝,但O改原始的任何东西2对于一数据,可2实际N一可指向v他2请牢记O面些要点,慢慢阅读O面几页内容,并在q们介绍有的头脑使用赋值运算符,可创建和赋值一个普通的标量量,如O示 Stones在k一W都很l常2时,在计算机中的某个地方有一个标 $a的位置,它包含了_如果将标量$b赋予$a,比如$a=$b,那N会产生数据的

3、两个拷贝,它们使用两个O如果你想要两个独立的数据拷贝,那N拥有两个拷贝是很好的2但是,如果想让 $a和都一个数据拷贝,那N 指向一数据的指针,并O包含实际数据的本身若要创建对某个既定,可在量的前面N一个反斜建称$ref的对$a,需要像O面样赋予$refs可个赋值创建了类似O面样的件$ref并O包含用于它自的任何数据,它是对 $a 指向一数据的指针,并O包含实际数据的本身若要创建对某个既定,可在量的前面N一个反斜建称$ref的对$a,需要像O面样赋予$refs可个赋值创建了类似O面样的件$ref并O包含用于它自的任何数据,它是对 $a的一2量$a根本没有改,然可照常被赋值$a=Foo或显示量$r

4、ef在包含对$a2O能简单地对$ref进行操作,因它边没有通常的标值2实际N如果输出$ref,就会显示类似SCALAR(0 x0000)的信o2若要通过$ref获得$a$ref2可被视N面的方块图中按箭头2$ref来输出$a的值,你可像O面样使用一个在N面的码段中, $ref当然包含2增的一个$告诉Perl,$ref中标量值的标量值被出并输出_可通于修改$a中的原始值项修改形p了类似O面如果你使用$ref而O是那N放在$ref中将被撤并被实际值,如O示N面个码段运行, $refO再包含一,它是一个标量2你可像任何vN面的码段运行$oref和$nref均可用于Gandalf=2_可放对某个,如O

5、示 在类似O面的形式如果使用$bref2来输出书,那是请注意, $bref2符号,它需要增,才能获得原始值13.1.1 对数_可创建对数和 在类似O面的形式如果使用$bref2来输出书,那是请注意, $bref2符号,它需要增,才能获得原始值13.1.1 对数_可创建对数和哈希在标量量$aref包含了对整个数arr若要使$aref来问arr的各个部V,你可使用O列码之一了清楚起,可使用花括号P及数的各个部V隔开,如O示例如,若要使用数P$aref0,便输出arr的有元素,可使用O面个码13.1.2 ,可使用反斜,就像创建标量和数N面个码段用于创建对哈希结构 %hash%href来问%hash的

6、各个部V,可使用O面些码例子若要迭通过哈希结构,输出有的值,可使用O面个码数据 数据 数据数据 数据 数据 数据 数 13.1.3 由于整个数,并可放在一个标量中,因m借,你可调用带有多个数或哈希结构的函数你可能记得第8学时中q们讲过,O面种码段是O能运行的个码O能运行,因 13.1.3 由于整个数,并可放在一个标量中,因m借,你可调用带有多个数或哈希结构的函数你可能记得第8学时中q们讲过,O面种码段是O能运行的个码O能运行,因getarrays(fruit,veggies)将两个数压缩到单个数_中2在getarrays()函数中,将a和b赋予_,会导在放在_中的fruits和vegetabl

7、e的有元素都被赋予当有数g入_之,就没有办法知道一个数在何时结和O一个数在何时开始有一个很大可发h作用的地方2你O必将整个数传递给 gearays要传递对些,无论$fruit_ref和$veg_ref可用来显示或编辑数据,如O示当你将对标量1数作参数传递给函数时,有几个问题必须记住指向的原始数据进行操作2请看O面些例子 在边的例子中,当按l常情况传递哈希结构时, _得原始哈希结构%hash中每个s键 在边的例子中,当按l常情况传递哈希结构时, _得原始哈希结构%hash中每个s键_值对的各个值2在子例程 changehash()中,在放入_中的哈希结构的各个元素被拷贝,%local_hash就

8、被撤,而程序的要部V中的%hash则保持在右边个例子中,对%hash通过_被传递到子例程changehash()中贝到标量$href中,它然指原始哈希%hash2在子例程中, $href例程返回2changehash()返回,原始哈希结构%hash将包含新s键13.1.4 创建对数,可用来P子例程之间来回传递些结构,并可来创建O面q们很快就要介绍的一些复杂结构2O过你应知道,当你创建了对哈希结构数,就O再需要原始哈希结构或数2要对哈希结构或数在,s原始数据O再在, Perl然保留着哈希结构和数的各个元素在O面的码段中,码块中创建了一个哈希结构 %hash,并个哈希结构是码块在个码块中,标量$h

9、ref被赋予对%hash使 失,$href中然有效因%hash是码块的_用结构2当结构本身经超出作域之,对的哈希结构然可修改如果你察N面个码块,就会发,它的唯一目的是创建对哈2Perl供了一个机制,可用来创建样 ,并把它储在 $ahref中花括号,但实际N并没有创建新的量2当数_用于传递子例程参数时,它是个的数。修改_数元素就会改变传递到函数中的原始值。修改传递给子例程的参数,通常被认为是O慎重的一种做法。如果你想让子例程修改传递给它们的参数,那么应该传递对子例程的 。这种操作方法更加清楚。当传递一个 时,可以认为原始值是可以修改的。 可使用前面的对哈希=一节中介绍的有方法,对匿哈希结构进行操

10、作 可使用前面的对哈希=一节中介绍的有方法,对匿哈希结构进行操作样,_可使用前面的对数=一节中介绍的方法对数进行操作当的量本身超出作用域时如果它是个_用量,那如果use strictl在运行,那NN面个码段甚O进行编译2Perl将$ref的最一个实例视全局量,是O允许的2s使没有use strict Perl的w警告特性_会输出一个 undefinedvalue未定O的值o2些匿哈希结构和匿数可合p某些结构形式,们将在O一节中介绍构2每个哈希结构和数表一个标量值,并由于它是单个标量值,因m可在v他数和哈希结构中,如O示O面各节将介绍列表和哈希结构的一些常用结构配置方法13.2.1 在Perl中

11、,列表中的列表常常用来表一种称二维数的结构2_就是说,标准数个值的线性列表,如O示二维数类似一个值的表格,面的每个元素按照轴N的一个点来进行编址2数据 数据 数据数据 数据 数据数据 数据 数值值值值 Perl实际N并O支持真l的二维数Perl允许你使用数的数,模仿建立二维若要创建数的数,请使用O面个原O表达式 Perl实际N并O支持真l的二维数Perl允许你使用数的数,模仿建立二维若要创建数的数,请使用O面个原O表达式p2若要问最层的列表的各个元素s二维数中的单元格,可使用O面个码若要确定最外层的列表中的元素数目,你可像对v他任何数那样进行操作,使用 表示法或者使用标量NO文中的数若要确定层

12、列表中的某个列表的元素数目,可能有一点儿麻烦2语 $list_of_lists1回list_of_lists2如果将它输出,则显示类似ARR0 x00000个数据若要将list_of_lists的一个元素当作数来处理,请在它的前面N一个符号 ,如示若要遍历列表的列表中的每个元素,可使用O面个码可添O面样的结构13.2.2 在N一节中,q们介绍了如何使和数创建基本的 Perl结构,s列表的列表2N可将数量O限制的数1标量和哈希结构的形合起来,创建更复杂的数据结构,比如O面些结构哈希结构的哈希结构由于本书篇幅有限,无法一一介绍有些结构2你安装的每个 Perl含了一个称 Perl Data Stru

13、ctures Cookbook(Perl的数据结构大全)=文档2它细而明白述了些结构和许多v他数据结构2对于每种数据结构Per Data Structures Cookbook= 2 Cokb 2 Cokbok 13.2.3 指向什N种类的数据结构外,在你惯之前,语_容2Perl提供了一些w,可帮你确定有s的情况首先,可输出2Perl能够显示指向什N结构2例如,O面个码行个结构意味着量$mystery_reference是对一个数量SCALAR1哈希结构HASH或子例程CODE的 2m外,量_可是对2若要输出 $mystery_Perl的调试程序_配有一些程序w,帮你确指向什N数据结构2在调试

14、程序中,你可像通常那样输2O面个码段显示了一个被查看的 $ref 结构和包含一个带有两个元素s键_8 fruit9和8vegetable结构2调试程序甚能够输出列表的列表之类的复杂数据结构,如O示N面的例子显示了一$a,它指向一个数ARRY0 x20170bd4而个数,s ARRAY0 x201154841ARRAY0 x2011fbb4和 0 x2011faa0,每个数包含3个元素模块DataDumper包 0 x2011faa0,每个数包含3个元素模块DataDumper包含的一些函数能够显示二的,它的输出格式是有效的Perl格式,它可入文件,并在被检索,提供可储结构2DataDumper

15、模块将在第14学时中介绍13.3 习:另一当你学了那N多的新奇概念和结构之,需要来一点了2O面,并你可做一个简单的游采用探险和狩猎之类的传统游o方式,你被置于一个迷宫之中,必须找到你的出路个迷宫并无奇特之处,它是由一些间p,并每个间少有一个门2门可通向位于东1南1西1X的相邻间2个游o的目的是找到一间密室2你会发通往密室有,外有许多走O通的路输出13-2,并将它保Maze2运行程序,得到类似程13-1程13-程13- 第12行两行码是Perl程序l常的开始2-w使警 第12行两行码是Perl程序l常的开始2-w使警告特性被激活usestrict用于捕获第49行用于定O述迷宫maze的结构2显示

16、的迷宫是个 44的栅格,用一个列表的有一个间 2,1是无法进入的,在个结构中用一个 - 来表示个间2实际N第1011行当游o的玩向X或向南移时,迷宫中的当前位置就需更2哈希结构%direction用来根据老的位置和移方向计算玩新位置2如果向X=移,则使玩的x坐标移-1向N,y坐标保持O2如果向东=移,则玩的 x坐标O,而y坐标增12你将在第3334行码中看到坐标的更情况第1315行程序中使用的量用 my进,便使 use strict p当地运行2放$curr_x和$curr_y中的玩当前位置被置0,02最目的地$x和$y被置3,32第17行根据栅格中的x,y坐标,函数显示玩可在每个间中移的方向

17、2第20行在$maze$cx$cy的间述中选择_母n1s1e和w,每次选择1个_母2希结构full中显示nsew方向的相应述2个哈希结构用于将短_ n)转换p目 (Norfh),供显示之用第25行函数出一个方向放在$new中和对玩2第28行方向用lc改小写_母, substr出第一个_母,并将它 (Norfh),供显示之用第25行函数出一个方向放在$new中和对玩2第28行方向用lc改小写_母, substr出第一个_母,并将它赋予$new2样, s第29行搜索当前间的$maze$xref$yref,找出给定的方向n1s1e和w 2如果 2第3334行玩的x和y坐标被更改2如果方向是e,则$d

18、irectione是对两个元素的数01 2x坐标将递增0,s$directione02Y坐标将递增第37行程序的体启运行2循将O断运行,直到玩的x和y坐标 第39行需要的移方向读入$move,用chomp删除换行符2如果玩键入q开头的任 move_to(move_to()子例程通过调整$curr_x和$curr_y,使玩作相应的移若要修改迷宫,使之采用一种布局,需改放在 maze中的栅格2迷宫O一定需要做pl方形,_O需要给每个间制作映像,甚O需要在一有效的路径2O过请住,迷宫O要它边N的某个间开始2程序O会检查迷宫的有效性,O过,如果你创一个无效迷宫, Perl就会发出警告2如果要移迷宫中的密室,需改$x和$y的值本学时q们介量1数和哈希结构的基本概念2首先,讲述了如何创建对 Perl的基本数据结2然,介绍了如何使用,对原始数据结构进行操作没有Pm相s的量接着,说明了如何创建对哈希结构或数,过种称匿储2最介绍了如何使来创建复杂的数据结构及何处可有数据结构的文档资料问题: 当

温馨提示

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

评论

0/150

提交评论