加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl -- 子过程-->语法

发布时间:2020-12-16 00:27:29 所属栏目:大数据 来源:网络整理
导读:? 1、声明一个命名子过程,但不定义: sub NAME sub NAME PROTO sub NAME??????? ATTRS sub NAME PROTO? ATTRS 如果要定义一个子过程,只要在上面加上一个BLOCK就可以了 sub NAME PROTO? ATTRS BLOCK PROTO和ATTRS表示原型和属性,相对于NAME和BLOCK不重要,
?

1、声明一个命名子过程,但不定义:

sub NAME

sub NAME PROTO

sub NAME??????? ATTRS

sub NAME PROTO? ATTRS

如果要定义一个子过程,只要在上面加上一个BLOCK就可以了

sub NAME PROTO? ATTRS BLOCK

PROTO和ATTRS表示原型和属性,相对于NAME和BLOCK不重要,NAME和BLOCK是基本部分,其他的可以省略。

2、没有NAME的形式也是可以的 ,你必须提供一个调用子过程的方法。因此你必须保存返回值,因为这种形式的sub声明方法不但在编译的时候编译,同时也产生一个运行时的返回值,所以我们就可以保证保存它:

$subref = sub BLOCK;

也可以用下面的方法引入在另一个模块中定义的子过程:

use MODULE qw (NAME1 NAME2 NAME3…);

3、直接调用子过程的方法

NAME(LIST)???? #有圆括弧时,&是可选的

NAME LIST?????? #如果预声明/输入了子过程,那么圆括弧是可选的

&NAME?? #把当前的@_输出到子过程,并且绕开原型

4、间接调用子过程,(通过名字或引用),可以使用下面的任何一种方法:

&$subref(LIST)??????? #在间接调用的时候,&不能省略

$subref->(LIST)??????? #

&¥subref?????? #把当前的@_输出到该子过程

?

#:在正式的情况下,一个子过程的名字包括&前缀,但是通常情况下&是可选的;

#:如果预先定义了子过程,那么圆括弧是可选的;

#:在只使用子过程的名字的时候,&不能省略;

例如:1)子过程名字被用作一个参数来判断是否已经定义过;

???????? 2)用$subref = &;name来获取一个命名子过程的引用的时候;

???????? 3)$subref->(),则不需要&;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读