定义子程序:使用关键字sub,例如
sub marine{
$n+=1;
print "Hello,sailor number $n!\n";
}
子程序可以定义在程序的任意位置,如果定义了两个重名的子程序,后面的会覆盖掉前面的
可以在子程序中使用任何全局变量
调用子程序:可以在任意表达式中使用子程序名(前面加上&)来调用,如&marine;
返回值:最后一次运算的结果(不管是什么),都会被自动当成子程序的返回值
print语句的返回值是1,代表输入成功
参数:要传递参数列表到子程序里,只要在子程序调用的后面加上被括号圈引的列表表达式
如$n=&max(10,15);
perl会自动将参数列表化名为特殊的数组变量@_,该变量在子程序执行期间有效,子程序可访问这个数组
多余的参数会被忽略,参数不足会得到undef
@_变量是子程序的私有变量
sub max{
if($_[0]>$_[1]){
$_[0];
}else{
$_[1];
}
}
子程序中的私有变量:使用操作符my可以在子程序中随时创建私有变量
my($m,$n)=@_;#将保存在@_中的参数赋值给具体的变量
更好的&max子程序:可以接受任意数目的参数
sub max{
my($max_so_for)=shift @_;
foreach (@_){
if($_>$max_so_far){
$max_so_far=$_;
}
}
$max_so_far;
}
关于词法(my)变量:词法变量可以使用在任何块内,而不仅限于子程序,如if、while等
my操作符并不会更改变量赋值时的上下文
use strict编译命令:接受更严格的限制,推荐
return操作符:从子程序中立即返回某个值,而不必执行完全部代码,类似于C语言
省略“与号”:如果编译器在调用子程序之前看到了子程序的定义,或perl单从语法上就能看出是子程序调用,可以省略&
不要将子程序的声明放在调用子程序之后
假如子程序和perl内置函数同名,必须使用&来调用
非标量返回值:如果在列表上下文调用子程序,就能返回列表值
还可以什么都不返回,单写一个return,在标量上下文返回值是undef,在列表上下文返回值是空列表
持久性私有变量:使用state操作符来声明变量,可以在子程序的多次调用期间保留变量的值,并将变量作用域局限于子程序
sub marine{
state $n = 0;
$n += 1;
print "Hello, sailor number $n\n";
}
————————————————
版权声明:本文为CSDN博主「Rockie」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/rockiecxh/article/details/25214951
perl子程序详解
最新推荐文章于 2023-06-29 23:21:03 发布