Perl可以讓我們創(chuàng)建子程序,也就是我們自己定義的函數。子程序用&開頭。
定義子程序
用關鍵字sub定義,可以定義在任意位置,不用事先聲明。
如果有重名子程序,那么后定義的會覆蓋之前定義的。
調用子程序時,只需要用 $子程序名 進行調用。
返回值
子程序的最后一次運算結果就被自動當作子程序的返回值。若子程序最后一步執(zhí)行的不是計算操作,那么會根據情況返回1或0。
參數
要傳遞參數到Perl子程序里,只要在調用后面加上被括號圈引的列表就行了,Perl會自動把參數列表化名為數組變量@_ 。 如果用到超出@_數組邊界的參數,只會得到undef
$n = &max(10,15);
sub max
{
if($_[0] > $_[1]){
$_[0];
}else {
$_[1];
}
}
子程序中的私有變量。
默認情況下,Perl內所有變量都是全局變量,在程序的任何地方的都可以訪問它們。但我們借助my操作符來創(chuàng)建私有變量,稱為詞法變量。
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操作符創(chuàng)建的私有變量,在每次調用這個子程序的時候都會被重新定義。而使用state操作符來聲明變量,就可以在多次調用期間保留變量之前的值,并且變量的作用域局限在子程序內部。
例子:
use 5.010
sub marine{
state $n = 0;
$n += 1;
print "hello"#這是執(zhí)行的最后一步,返回1
}