子程序的语法
sub<子程序名>{
<语句组>;
}
子程序的调用
用&调用;
用do调用;
先定义后调用,可以省略&符号;
前向引用,先定义子程序名,后面再定义子程序体
&getMinValue(14,50,37);
# 等价于
# do getMinValue(14,50,37);
sub getMinValue{
($a,Sb,Sc) = @_; #@_是函数传参时放置参数的数组,可以从中取实参
$min = $a;
Smin = $b if($b < $min);
$min = $c if($c < $min);
$min;
}
sub getMinValue{
($a,Sb,Sc) = @_;
$min = $a;
Smin = $b if($b < $min);
$min = $c if($c < $min);
$min;
}
getMinValue(14,50,37);
sub getMinValue;
getMinValue(14,50,37);
sub getMinValue{
($a,Sb,Sc) = @_;
$min = $a;
Smin = $b if($b < $min);
$min = $c if($c < $min);
$min;
}
局部变量
子程序局部变量定义的两种方法:my(只在子程序中存在,再Perl4中没有my)和local(存在于该子程序和其调用的子程序中)
子程序的参数传递
参数为数组时,子程序只将它赋给一个数组变量;但简单变量和数组变量可以同时传递。如:
&twoargs(47,@mylist); # 47赋给$scalar,@mylist赋给@list
&twoargs(@mylist); # @mylist的第一个元素赋给$scalat,其余的元素赋给@list
sub twoargs{
my ($scalar,@list) = @_;
}
预定义的子程序
Perl5预定义了三个子程序,BEGIN子程序在程序启动时被调用;END子程序在程序结束时被调用;AUTOLOAD子程序在找不到某个子程序调用。若同一个预定义子程序定义了多个,则BEGIN顺序执行,END逆序执行。