Perl-子程序

上一篇 / 下一篇  2015-01-04 06:59:30 / 个人分类:Perl

定义子程序
定义子程序,用关键字sub,子程序名以及用花括号封起来的代码块。
子程序总是由用户定义的,而函数则不一定。
子程序可以被定义在程序中的任意位置,不需要对子程序进行事先声明
子程序的定义是全局的
如果定义了两个同名的子程序,后面的子程序会覆盖掉前面的那个。
在子程序中可以使用任何全局变量。
可以在任意表达式中使用子程序名(加上与号)来调用子程序。
在Perl中,所有的子程序都有一个返回值,子程序并没有有返回值或没有返回值之分,但并不是所有的Perl子程序都包含有用的返回值。
在子程序的执行过程中,它会不断进行运算,最后一次运算的结果都会被自动当程子程序的返回值。
Perl子程序可以有参数,要传递参数列表到子程序里,只要在子程序调用的后面加上被括号圈因的列表表达式就可以了。参数列表将会被传入子程序,让子程序随意使用。Perl会自动将参数列表化名为特殊的数组变量@_该变量在子程序执行期间有效。子程序可以访问这个数组,以判断参数的个数以及参数的值。@_变量是子程序的私有变量 假如已经有了全局变量@_,则该变量在子程序调用前会被先存起来,并在子程序返回时恢复原本的值。子程序可以将参数传给其他程序,而不用担心遗失自己的@_.
私有变量
默认情况下,Perl里面所有的变量都是全局变量,程序的任何地方都可以访问他们,可以借助my操作符来创建私有变量。称之为词法变量。私有变量语句块外的变量完全不受私有变量的影响,外部变量也不受私有变量的影响
子程序可以接受固定长度的参数列表,也可以通过改进接受变长参数列表和空参数列表。
词法变量(my)可使用在任何语句块内,而不仅限于子程序的语句块。 
my 操作符不加括号时,只能用来声明 单个词法变量。
编译指令
所谓编译指令不过是提供给编译器的某些指示,告诉它如何处理接下来的代码。
use strict编译指令是要告诉Perl内部的编译器接下来的代码应该稍加严谨一点,遵循一些优良的变成风格。可以将use strict这个编译指令放在程序开头(或者任何需要强制使用约束规则的语句块或文件内) 从Perl 5.12开始,如果使用编译指令制定最低Perl版本的话,就相当于隐式打开约束指令。
return操作符
return会立即停止执行并从子程序内返回某个值,而不再执行子程序的其余部分。      
在调用子程序时何时可以省略与号?
如果编译器在调用子程序前看到过子程序的定义,或者Perl通过语法规则判断它只能是子程序调用,那么对待该子程序就可以像内置函数一样,在调用时省略与号。只能在没有同名内置函数的情况下省略与号。
子程序的返回值
子程序不仅可以返回标量值,如果你在列表上下文中调用它,他还能返回列表值。
单写一个return不给任何参数时,在标量上下文中的返回值为undef,在列表上下文的返回空列表。通常用于表示子程序执行有误,它告诉调用者无法取得有意义的返回值。
持久性私有变量
使用state操作符来声明变量,可以在子程序的多次调用期间保留变量之前的值,并将变量的作用域局限于子程序内部。 在第一次调用子程序时,Perl声明并初始化持久性私有变量,而在接下来的调用中,这个初始化的表达式将被Perl忽略。每次子程序返回时,Perl都会将持久化私有变量的当前值保留下来,以备下次调用时使用。
类似标量变量,任意类型的变量都可以被声明为state变量。                      

TAG:

 

评分:0

我来说两句

Open Toolbar