Perl可以让我们创建子程序,也就是我们自己定义的函数。子程序用&开头。
定义子程序
用关键字sub定义,可以定义在任意位置,不用事先声明。
如果有重名子程序,那么后定义的会覆盖之前定义的。
调用子程序时,只需要用 $子程序名 进行调用。
返回值
子程序的最后一次运算结果就被自动当作子程序的返回值。若子程序最后一步执行的不是计算操作,那么会根据情况返回1或0。
参数
要传递参数到Perl子程序里,只要在调用后面加上被括号圈引的列表就行了,Perl会自动把参数列表化名为数组变量@_ 。 如果用到超出@_数组边界的参数,只会得到undef
$n = &max(10,15);
sub max
{
if($_[0] > $_[1]){
$_[0];
}else {
$_[1];
}
}
子程序中的私有变量。
默认情况下,Perl内所有变量都是全局变量,在程序的任何地方的都可以访问它们。但我们借助my操作符来创建私有变量,称为词法变量。
sub max
{
my($m,$n);
($m,$n) = @_;
if($m > $n) { $m } else { $n }
}
Perl也支持变长参数列表和空参数列表
use strict编译指令
将use strict指令放在程序开头,将会让Perl多一些约束
return操作符
和其他语言一样
非标量返回值
子程序还可以返回列表值
例子:
sub list_from_fred_to_barney{
if($fred < $barney){
$fred..$barney;
} else {
reverse $barney..$fred;
}
}
持久性私有变量
在子程序中用my操作符创建的私有变量,在每次调用这个子程序的时候都会被重新定义。而使用state操作符来声明变量,就可以在多次调用期间保留变量之前的值,并且变量的作用域局限在子程序内部。
例子:
use 5.010
sub marine{
state $n = 0;
$n += 1;
print "hello"#这是执行的最后一步,返回1
}