Perl子过程(子函数)

Perl子过程(子函数)

ID:39467115

大小:119.00 KB

页数:15页

时间:2019-07-04

Perl子过程(子函数)_第1页
Perl子过程(子函数)_第2页
Perl子过程(子函数)_第3页
Perl子过程(子函数)_第4页
Perl子过程(子函数)_第5页
资源描述:

《Perl子过程(子函数)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Perl子过程(函数)象其他的语言一样,Perl也支持自定义的子过程.(注:我们也把它们叫做函数,不过函数和子过程在Perl里是一样的东西.有时候我们甚至叫它们方法,方法和函数或子过程是同样的方式定义的,只是调用方式不同.)这些子过程可以在主程序中的任何地方定义,也可以用do,require或use关键字从其他文件中加载.或者直接使用eval在运行的时候产生.你甚至可以使用第十章"包"中"自动装载"一节描述的机制在运行时加载它们.你可以间接调用子过程,使用一个包含该子过程名字或包含指向该子过程引用的变量来调用,或者通过对象,让对象决定调用哪个子过程.你可以产

2、生只能通过引用使用的匿名子过程,如果必要,你还可以通过闭合,用匿名子过程克隆几乎相同的函数.我们将在第八章"引用"中的相关小节中讲述.1.0语法声明一个命名子过程,但不定义它,使用下面的形式:subNAMEsubNAMEPROTOsubNAMEATTRSsubNAMEPROTOATTRS声明并且定义一个命名子过程,加上一个BLOCK:subNAMEBLOCKsubNAMEPROTOBLOCKsubNAMEATTRSBLOCKsubNAMEPROTOATTRSBLOCK创建一个匿名子过程或子句,把NAME去掉就可以:subBLOCKsubPROTOBLOCKs

3、ubATTRSBLOCKsubPROTOATTRSBLOCKPROTO和ATTRS表示原型和属性,分别将在本章下面的章节中讨论.相对于NAME和BLOCK它们并不很重要.NAME和BLOCK是基本部分,甚至有时候它们也可以省略.对于没有NAME的形式,你还必须提供调用子过程的方法.因此你必须保存返回值,因为这种形式的sub声明方法不但在编译的时候编译,同时也产生一个运行时的返回值,所以我们就可以保证保存它:$subref=subBLOCK;可以用下面的方法引入在另一个模块中定义的子过程:useMODULEqw(NAME1NAME2NAME2...)直接调用子

4、过程可以用下面的方法:NAME(LIST)#有圆括弧时&是可选的NAMELIST#如果预声明/输入了子过程,那么圆括弧是选的&NAME#把当前的@_输出到该子过程#(并且绕开原型).间接调用子过程(通过名字或引用),可以使用下面的任何一种方法:1.&$subref(LIST)#在间接调用的时候,&不能忽略2.$subref->(LIST)#(除非使用中缀表示法)3.&$subref#把当前的@_输出到该子过程正式情况下,一个子过程的名字包括&前缀,一个子过程可以使用&前缀调用,但通常情况下&是可选的,如果预先定义了子过程,那么圆括弧也是可选的.但是,在只使用

5、子过程名字的时候,&不能省略,例如当子过程名字被用做一个参数来判断是否它已经定义过的时候,或者当你使用$subref=&name来获取一个命名子过程的引用的时候.同样,当你使用&$subref()或&{$subref()}进行一个间接子过程调用的时候也不能省略&.不过,如果使用一种更方便的形式$subref->(),则不需要&.参看第八章,那里有更多有关子过程引用的内容.Perl并不强制子过程名字使用大写风格.但是按惯例由perl的运行时系统间接调用的函数都是大写的(BEGIN,CHECK,INIT,END,AUTOLOAD,DESTORY,和所有第十四章

6、"捆绑变量"涉及到的函数).因此你应该避免使用这种大写风格.(但是操作常量值的子过程通常也写成大写的).2.0语意在你记住所有语法前,你只需要记住下边这种定义子过程的普通方法:subrazzle{print"Ok,you'vebeenrazzled.";}和调用子过程的正常方法就是:razzle();在上边的写法中,我们省略了输入(参数)和输出(返回值).但是Perl向子过程中传入数据和子过程传出数据的方法非常简单:所有传入的参数被当成单个平面标量列表,类似的多个返回值也被当成单个平面标量列表返回给调用者.当使用任意LIST时也一样,任何传入的数组或散列

7、的值都代换到一个平面的列表里面,同时也失去了它们的标识,不过有几种方法可以绕开这个问题,这种自动的列表代换在很多场合非常有用.参数列表和返回值列表都可以根据你的需要包含任意多个标量成员(当然你可以使用原型定义来约束参数的类型).实际上,Perl是按照支持可变参函数(可以支持任何数量的参数)概念来设计的.C则不同,虽然C也勉强支持一些变参的函数,例如printf(3).现在,如果你将设计一种可以支持不定数量的任意参数的语言,你最好让你的语言在处理这些任意长的参数列表上容易些.所有传入Perl过程的参数都是以@_身份传入的.如果你调用一个有两个参数的函数,它们在

8、函数内部可以作为@_数组的前两个成员访问:$_[0]

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。