Per語言入門第4版學習筆記-第四章子程式
4.1 定義一個子程式
4.2 呼叫子程式
4.3 返回值
4.4 引數(Arguments)
4.5 子程式中的私有變數
4.6 引數列表的長度
4.6.1 更好的&max 程式
4.6.2 空引數列表
4.7my 變數的註釋
4.8 使用strict Pragma
4.9 返回操作
4.9.1 省略符號&
4.10 非標量返回值[@more@]
第四章子程式
4.1 定義一個子程式
要定義自己的子程式,使用關鍵字sub,子程式的名字
sub marine {
$n + = 1; #全域性變數$n
print “Hello, sailor number $n!n”;
}
事實上,到現在為止所出現的所有變數均是全域性的
4.2 呼叫子程式
可以使用子程式的名字(帶有&)來呼叫子程式
&marine;
4.3 返回值
下面的子程式:
sub sum_of_fred_and_barney{
print “Hey, you called the sum_of_fred_and_barney suroutine!n”;
$fred + $barney; #返回值
}
子程式中最後一個被計算的表示式為$fred + $barney,因此$fred 和$barney 的和將被返回。
如果最後一個被計算的表示式不是$fred + $barney;而是print 語句。其返回值通常為1。
4.4 引數(Arguments)
Perl 子程式可以帶引數。將引數列表傳給子程式中的方法是,在程式名後面接括號,括號記憶體放引數列表,如:
$n = &max(10,15); #此子程式有2 個引數
在Perl 中,會自動將此引數列表(此引數列表的另一個名字)自動存放在一個叫做@_的陣列中。
這也就是說此子程式引數的第一個值存放在$_[0]中,第二個存放在$_[1],依次類推。
4.5 子程式中的私有變數
Perl 在每一次呼叫時提供@_這個私有變數,那它可以給我們提供私有變數。
sub max {
my($m,$n); #新的,私有變數
($m,$n) = @_; #賦值
if($m > $n) {$m} else{$n}
}
這些變數是此程式碼塊中的私有的(或者區域性的)變數;別的$m 和$n 不會影響此處的兩個變數。而且,其它地方的程式碼不能訪問或者修改這些變數
4.6 引數列表的長度
子程式可以容易的檢測@_是否含有恰當的個數。
sub max{
if(@_!=2){
print “WARNING! &max should get exactly two arguments!n”;
}
#continue as before….
.
.
.
}
4.6.1 更好的&max 程式
$maximum = &max(3,5,10,4,6);
sub max {
my($max_so_far) = shift @_;
foreach (@_){
if($_>$max_so_far){
$max_so_far=$_;
}
}
$max_so_far;
}
4.6.2 空引數列表
4.7my 變數的註釋
這些區域性變數可以在任意塊中使用,不僅僅是子程式中。例如,可以在if,while,foreach 等塊中使用:
foreach (1..10){
my($square) = $_*$_; #本迴圈中的私有變數
print “$_ squared is $squrare.n”;
}
4.8 使用strict Pragma
你可能希望Perl 嚴格一些;那可以使用strict pragma。
告訴Perl 進行更嚴格的語法檢測,需要在程式頂端use strict
4.9 返回操作
return 返回值,不再執行後續操作
4.9.1 省略符號&
有幾條規則確定在呼叫子程式時是否可以省略掉&。
如果編譯器在呼叫之前知道此子程式的定義,或者Perl 從語法中能知道這是一個子程式呼叫,則子程式前的符號&是可以省略的,像使用內嵌(built-in)函式一樣。
總的來說就是,如果你寫的子程式的名字和perl的預設函式 沒有重名的,就可以省略&
4.10 非標量返回值
sub list_from_fred_to_barney {
if($fred < $barney) {
#Count upwards from $fred to $barney
$fred ..$banrey
} else {
#Count downwards from $fred to $barney
reverse $barney ..$fred;
}
$fred = 11;
$barney = 6;
@c = &list_from_fred_to_barney; 為(11,10,9,8,7,6)
4.11
1.
#!/usr/bin/perl
sub total{
$tot = 0;
foreach $num (@_) {
$tot = $tot + $num;
}
$tot;
}
my @fred=qw{ 1 3 5 7 9 };
my $fred_total = &total(@fred);
print "The total of @fred is $fred_total.n";
print "Enter some numbers on separate lines:";
my $user_total = &total(
print "Tht total of those numbers is $user_total.n";
2.
#!/usr/bin/perl
sub total{
$tot = 0;
foreach $num (@_) {
$tot = $tot + $num;
}
$tot;
}
my @fred=( 1..1000 );
my $fred_total = &total(@fred);
print "The total of 1+...+1000 is $fred_total.n";
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/133835/viewspace-1026097/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Per語言入門第4版學習筆記-第二章標量資料R語言筆記
- Per語言入門第4版學習筆記-第三章列表和陣列R語言筆記陣列
- Dart程式語言入門學習Dart
- 組合語言零基礎入門學習筆記(一)組合語言筆記
- c語言程式基礎學習筆記C語言筆記
- 微信小程式入門學習筆記微信小程式筆記
- golang 學習筆記:第 1 節:GO 語言介紹Golang筆記
- 《深度學習入門》第 2 章 感知機 筆記深度學習筆記
- C 語言學習筆記筆記
- C語言學習筆記C語言筆記
- Go語言快速入門筆記01Go筆記
- 組合語言學習筆記組合語言筆記
- 如何學習python程式語言?python入門Python
- TS入門學習筆記筆記
- 【PostgreSQL】入門學習筆記SQL筆記
- git入門學習筆記Git筆記
- Docker入門學習筆記Docker筆記
- Unity學習筆記--入門Unity筆記
- ActionScript 學習筆記(入門)筆記
- 如何學習一門程式語言
- JavaScript入門學習學習筆記(上)JavaScript筆記
- c語言入門這一篇就夠了-學習筆記(一萬字)C語言筆記
- C語言0基礎入門遊戲輔助開發—學習筆記01C語言遊戲筆記
- 《組合語言》王爽,學習筆記(子程式呼叫)組合語言筆記
- 熱更新語言--lua學習筆記筆記
- c語言學習筆記===函式C語言筆記函式
- 《JavaScript語言精粹》學習筆記二JavaScript筆記
- 《JavaScript語言精粹》學習筆記一JavaScript筆記
- R語言學習筆記之一R語言筆記
- Go 基礎語言學習筆記Go筆記
- Go 入門指南學習筆記Go筆記
- React入門指南(學習筆記)React筆記
- pandas 學習筆記 (入門篇)筆記
- HTML入門學習筆記(二)HTML筆記
- MySQL學習筆記---入門使用MySql筆記
- JavaScript入門-學習筆記(一)JavaScript筆記
- Dubbo學習筆記(一) 入門筆記
- golang入門學習筆記(一)Golang筆記