子程序即一段分离的代码,它可以使减少重复代码且使程序易读。PERL中,子程序可以出现在程序的任何地方。
但一般放在程序的开始或结尾。
sub subroute{
statements:
}
Sub开始,子程序名同变量的命名规则,可与变量同名。最好不要与内部函数同名。如果与内部函数同名则用&subroutine区分,不用&是内部函数,&是定义的函数,
带有原型说明的子程序定义
sub subroutine ($$) { ##需要两个简单变量的参数
statements;
}
() 中的符号表示参数的类型。以一个字符表示一个参数.
$ 简单变量 @列表 %散列
&匿名子程序 *引用
前面加为强制类型一致。;分隔必须的参数和可选参数。
@$;$ 表示第一个参数为列表
函数返回值:
1. 缺省子程序中最后执行的一个语句的值将用作返回值,如果在if块中为最后执行的语句,虽然不是子程序的最后一句,也是返回值。
$a=1;
不用等于,直接$retval;
split(/:/,@a);返回数组。
2.语句return(retval);退出子程序并返回值retval,retval可以为列表。
3.返回错误
return;返回错误undef
用eval('subroutine');函数,错误由$@变量中取得。
参数传递
形式:
&sub1($number1,$number2,$number3);#调用
sub sub1{
my ($number1,$number2,$number3)= @_;
}
my $number1=shift;
my $number2=shift2;
my $number3=pop;
所有参数在数组@_中,每个元素为$_[0],$_[1]
@_,$_[] 为局部变量,当子程序内再调用子程序时, @_不改变。会新生成另一份@_
改变@_内元素的值如$_[0] 会改变主程序的参数只。
shift pop 一次取一个参数。对@_操作,shift 取第一个参数,然后删除,pop取最后一个参数再删除。