Perl子过程(子函数).docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Perl子过程(子函数)

Perl子过程 象其他的语言一样,Perl 也支持自定义的子过程.(注:我们也把它们叫做函数,不过函数和子过程在 Perl 里是一样的东西.有时候我们甚至叫它们方法,方法和函数或子过程是同样的方式定义的,只是调用方式不同.)这些子过程可以在主程序中的任何地方定义,也可以用 do,require 或 use 关键字从其他文件中加载.或者直接使用 eval 在运行的时候产生.你甚至可以使用第十章包中自动装载一节描述的机制在运行时加载它们.你可以间接调用子过程,使用一个包含该子过程名字或包含指向该子过程引用的变量来调用,或者通过对象,让对象决定调用哪个子过程.你可以产生只能通过引用使用的匿名子过程,如果必要,你还可以通过闭合,用匿名子过程克隆几乎相同的函数.我们将在第八章引用中的相关小节中讲述. 1.0 语法 声明一个命名子过程,但不定义它,使用下面的形式: sub NAME sub NAME PROTO sub NAME ATTRS sub NAME PROTO ATTRS 声明并且定义一个命名子过程,加上一个 BLOCK: sub NAME BLOCK sub NAME PROTO BLOCK sub NAME ATTRS BLOCK sub NAME PROTO ATTRS BLOCK 创建一个匿名子过程或子句,把 NAME 去掉就可以: sub BLOCK sub PROTO BLOCK sub ATTRS BLOCK sub PROTO ATTRS BLOCK PROTO 和 ATTRS表示原型和属性,分别将在本章下面的章节中讨论.相对于 NAME 和 BLOCK 它们并不很重要.NAME 和 BLOCK 是基本部分,甚至有时候它们也可以省略. 对于没有 NAME 的形式,你还必须提供调用子过程的方法.因此你必须保存返回值,因为这种形式的 sub 声明方法不但在编译的时候编译,同时也产生一个运行时的返回值,所以我们就可以保证保存它: $subref = sub BLOCK; 可以用下面的方法引入在另一个模块中定义的子过程: use MODULE qw(NAME1 NAME2 NAME2...) 直接调用子过程可以用下面的方法: NAME(LIST) # 有圆括弧时 是可选的 NAME LIST # 如果预声明/输入了子过程,那么圆括弧是选的 NAME # 把当前的 @_ 输出到该子过程 #(并且绕开原型). 间接调用子过程(通过名字或引用),可以使用下面的任何一种方法: $subref(LIST) # 在间接调用的时候, 不能忽略 $subref-(LIST) # (除非使用中缀表示法) $subref # 把当前的 @_ 输出到该子过程 正式情况下,一个子过程的名字包括 前缀,一个子过程可以使用 前缀调用,但通常情况下 是可选的,如果预先定义了子过程,那么圆括弧也是可选的.但是,在只使用子过程名字的时候, 不能省略,例如当子过程名字被用做一个参数来判断是否它已经定义过的时候,或者当你使用 $subref = \name 来获取一个命名子过程的引用的时候.同样,当你使用 $subref() 或 {$subref()} 进行一个间接子过程调用的时候也不能省略 .不过,如果使用一种更方便的形式 $subref-(),则不需要 .参看第八章,那里有更多有关子过程引用的内容. Perl 并不强制子过程名字使用大写风格.但是按惯例由 perl 的运行时系统间接调用的函数都是大写的 (BEGIN, CHECK, INIT, END, AUTOLOAD, DESTORY,和所有第十四章 捆绑变量涉及到的函数).因此你应该避免使用这种大写风格.(但是操作常量值的子过程通常也写成大写的). 2.0 语意 在你记住所有语法前,你只需要记住下边这种定义子过程的普通方法: sub razzle { print Ok, youve been razzled.\n; } 和调用子过程的正常方法就是: razzle(); 在上边的写法中,我们省略了输入(参数)和输出(返回值).但是 Perl 向子过程中传入数据和子过程传出数据的方法非常简单:所有传入的参数被当成单个平面标量列表,类似的多个返回值也被当成单个平面标量列表返回给调用者.当使用任意 LIST 时也一样,任何传入的数组或散列的值都代换到一个平面的列表里面,同时也失去了它们

文档评论(0)

xjj2017 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档