Subroutine 子程序 Perl 第四章
子程序的定義是全局的,不需要事先聲明。若重復定義子程序,后面的覆蓋前面的。
?
sub marine {
$n +=1;
print " Hello ,sailor number $_ ! ";
}
?
調用:&marine;
返回值:最后一次的運算結果會被當作返回值。
變量:所有變量默認為全局變量
參數:@_為subroutine 的私有變量。若恰有全局變量@_ 則調用子程序時存起,子程序結束會自動恢復。
? ? ? ? ?$_[0]? $_[1] $_[2]? ...存于數組變量@_
? ? ? ? ? ?sub max {
? ? ? ? ? ? ? if (@_ != 2)? { print? "? “};
? ? ? ? ? ? ? ? if ($_[0] > $_[1]) {
? ? ? ? ? ? ? ? ? ? print "? ";
? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? }
? ? ? &max(13,29) ;
?
example2:
? ? ? $maxmun = &maxh(2,8,32,44,9);
? ? ?sub maxh {?
? ? ? ? my ($max_so_far) = shift @_ ;
? ? ? ?foreach (@_)? {
? ? ? ? ?if ($_ > $max_so_far)? { $max_so_far = $_ };
? ? ? ? }
? ? ? $max_so_far;
? }
?
私有變量: my
?sub max {
? my ($m,$n) = @_ ;? #子程序私有變量;和子程序外的世界互不相犯
? }
?
?
?
作用域受限于定義它的最內層語句塊/文件 #語句塊為foreach等。
my 操作不會改變賦值時的上下文
?
my? ($num)? = @_? ;? # 列表上下文? 等同于? ($num) = @_
my? $num = @_ ; #標量上下文? 等同于? $num = @_
my $fred,$baney? # 錯,沒有聲明$baney
?
return:立即停止執行,并返回某值。
? ? ? ? sub which {
? ? ? ? ?foreach (? )? {? ? ? ? ?
? ? ? ? ?if? ( )? {
? ? ? ? ? ? ? ? ? ? ?return? $_;
? ? ? ? ? ? ? }
? ? ? ? ?}
? ? ? ?return -1 ;? #或省略return? ?指查無此值,沒有找到符合條件的元素
? ? }
?
省略&號:
和內嵌函數同名時,不能省略&。? 比如自定義一個函數chomp() ,調用時必須使用&chomp
?
非標量返回值:
sub? listx? {
if ($a < $b) {
? $a..$b
} else {
reverse $a..$b
}
@c = &listx(11,6)? ;#? 11,10,9,8,7,6
?
持久性私有變量:state? 多次調用子程序期間,保留該變量每次的值。適用于未定義的全局變量這種情況,my私有變量每次調用結束,就會拋棄存值。
?
轉載于:https://www.cnblogs.com/lelin/p/11206190.html
總結
以上是生活随笔為你收集整理的Subroutine 子程序 Perl 第四章的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python之编写登录接口
- 下一篇: 好玩游戏的物品清单