七、Perl子程序
1、Perl子程序的基本概念
子程序的定义
- 执行一个特殊任务的一段分离的代码
- 可以重复使用的一段代码
- 在Perl中。子程序可以出现在程序的任何地方
- 优点
- 利用子程序把长的脚本分解为小的更易理解的片段
- 把常用操作封装为独立的单元,真正实现代码的重用
- 一次创建,多次调用
语法
声明
- sub Name ##声明一个名字为Name的子程序
- sub Name PROTO ##声明Name子程序,带原型
- sub Name PROTO ATTRS ##声明Name子程序,带原型和属性
创建子程序
sub Name Block ##Block为子程序的内容
sub hello { print "hellow world!\n }
Perl子程序的基本规则
- 子程序定义以sub关键字开头,后面接程序名
- 子程序体用花括号括起来
- 子程序可以在Perl中任何地方定义,或者从外部文件导入
- 被传递的参数可以通过Perl的特殊变量@_访问
2、Perl子程序的调用
子程序直接调用的语法
Name(LIST) ##函数名、圆括号和参数列表
Name LIST ##函数名和参数列表
&Name ##&和函数名
用&调用
- 适用于先调用后定义
- 形式为:&subname; &sub subname{…}
省略&符号
- 适用于先定义后调用
- 形式为:sub subname{…}; subname;
- 有圆括号号时,也可以省略&符号
省略括号
- 适用于预声明/输入了子过程
用do调用
- 不需要用&
- 形式为:do Name(LIST);
说明
- Perl自带很多函数,都是用大写命名,如BEGIN,INI
- 应尽量避免全大写命名
返回值
- 子程序调用后,会以值的形式返回
- 返回值可以为字符串、数字值、布尔值,甚至为空
- 在默认情况下,子程序最后一个语句的值将作为返回值
- 可以使用return来指定返回值
- 子程序中,return之后的语句将被忽略,注意书写位置
参数传递
- 主函数和子函数的联系通过参数传递实现
- Perl中参数传递的方式非常多样化
- Perl中默认使用@_代表所有子程序的输入参数列表
- 传递形式为:
- &sub1($number1,$number2,$number3)
- sub sub1 { my($number1,$number2,$number3) = @_; }
- 传递数组参数
- 形式同标量参数一样,子程序中用@_接收
- 说明
- 参数为数组时,子程序只赋值给一个数组变量
- 子程序中多余的数组变量为空
- 变量和数组可以同时传递
3、Perl子程序和局部变量
- 局部变量
- 变量有各自的作用域
- 子程序中的变量,作用域一般在当前子程序中
- 通过my来识别局部变量的特征
- 子程序之间的变量值交互
- 通过引用来传递变量