定义和调用子程序
使用sub关键字定义子程序roll,该子程序用于掷色子,它返回1-6之间的随机整数:
sub roll{
print 1 + int(rand(6));
}
注意:
在定义子程序时,不要随意在子程序名称后面加上小括号,
sub f(){}
和sub f{}
是有很大区别的,前者是一种使用原型(prototype)的子程序定义方式,通常称为原型子程序。在本章节的后面将详细介绍原型子程序。
定义好roll子程序后,有几种调用子程序的方式:
- 使用子程序名称调用子程序
- 使用sigil前缀
&
调用子程序 - 子程序名称后面加上小括号
不同调用方式的行为不同,本章后面将详细介绍各种不同调用方式的区别。
例如:
# 定义子程序
sub roll{
print 1 + int(rand(6));
}
# 不同调用方式
roll;
roll();
&roll;
&roll();
可以使用return关键字(return实际上也是一个内置函数)设置子程序的返回值,return会使子程序立即退出,即让子程序的执行流程立即终止。例如,返回掷色子的随机整数值,而不是输出它:
sub roll{
return 1+int(rand(6));
}
设置子程序的返回值后,调用子程序时它就有了返回值。使用返回值的其中一种方式是将返回值赋值给变量:
my $random = &roll;
还可以为子程序传递参数,使得子程序内部可以使用传递进来的数据。Perl子程序的参数处理比较特殊,在后面会详细解释。
sub roll{
my $num = shift @_; # 获取传递的第一个参数
return 1 + int( rand($num) );
}
# 调用参数时,传递参数
my $random = roll(6);