定义子程序
关键字sub
例如:
sub func
{
$n+=1;
}
同c++不同的地方:在子程序里定义的变量$n属于全局变量,并且对于变量的位置没有要求,但是c++偏向于将子程序放在主函数的前面声明和定义,但是perl没有限制。
调用子程序
使用关键字符&
例如
&func; #n的值这时为1
&func; #n的值这是为2
返回值
两种方式:缺省方式返回和关键字return
缺省方式:把子程序中最后一句表达式作为返回值
例如在func中n的值就是返回值
return方式 :用return关键字显式的标记返回值,立即返回,与c++相同
参数
传递参数:&func(1,10);#1和10就是这个子程序的实际参数
与c++的不同:定义时,没有形参列表。
子程序会自动将参数传入一个名为@_的数组,并且$_[0]表示第一个参数,依次类推
注意$_和$_[0]没有什么关系
值传递:?有没有类似引用形参这样的概念
例如:
sub max
{
if($_[0]>$_[1]){
$_[0];
}
else{
$_[1];
}
}
调用:&max(2,3);
子程序的私有变量
关键字:my
sub max{
my($m,$n);#mn为私有变量,生命周期只是存在于花括号内
}
use strict 编译命令
这样perl会要求你一定要用my来声明每个新的变量
如果没有my的限制,则编译的时候会产生fetal error
持久性私有变量
关键字:state
变量的作用域始终确定在子程序中,并且可以保留变量的值,有点static的意思