学习内容
- 定义子程序
- 调用子程序
- 返回值
- 参数
- 子程序中的私有变量
- 长度可变的参数列表
定义子程序
在perl语言,可以把子程序等同于函数,函数全部都有返回值。
#定义一个子程序/函数
sub marin{
$n +=1;
#这个$n是全局变量
#若是私有变量格式为:my $n +=1;
print "hello everyone $n\n";
}
调用子程序
&marin;
#连续调用多次
&marin;
&marin;
返回值
sub calc {
$a = $fred +$bar;
$b = $fred -$bar;
$c = $fred *$bar;
$d = $fred +$bar;
}
$fred = 30;
$bar = 3;
$result = &calc;
#函数计算结束,把返回值赋值给result,返回值是最后一个计算结果
print $result . "\n";
sub larger {
if($fred > $bar){
$fred;}
else{
$bar;}
}
$result = &larger;
print $result . "\n";
#这个返回值取决于if语句
参数
sub max{
#参数在数组里:@_,数组里的每一个参数,$_[0],$_[1]
if($_[0] > $_[1]){
$_[0]
}
else{
$_[1]
}
}
$result = &max(10,15);
print $result . "\n";
#假如给了三个参数。也没有关系,自动把第三个参数忽略
$result = &max(10,15,27);
print $result . "\n";
子程序中的私有变量
#用私有变量写这个函数
sub max{
my($m,$n);
#私有变量作用范围,只在这个max函数里面
($m,$n) = @_;
if($m > $n){ $m; } else{ $n;}
#到这是最后一行的 $m;和$n; 的分号可以不写
#if($m > $n){ $m } else{ $n} 这样更简洁
}
#perl语言允许定义一个函数,再定义一个同名函数。第二个函数会把第一个函数覆盖
长度可变的参数列表
#可以输入很多参数
sub max{
my($max_so_far) = shift @_;
#用私有局部变量得到列表里第一个参数
foreach(@_){
if($_ > $max_so_far){$max_so_far = $_;}
}
$max_so_far;
#如果不加这个,返回的是foreach的返回值
}
$maximum = &max(3,5,10,4,6);
print $maximum . "\n";
$result =&max();