perl學習日記4 子程序

1.    子程序

函數的命名空間和列表,標量一樣,都是獨立的,不用擔心重名

1.1      定義一個子程序

sub marine {

$n + = 1; #全局變量$n

print “Hello, sailor number $n!/n”;

}

 

都是全局變量,私有變量前加my就行了

1.2      調用子函數

&marine; #輸出Hello, sailor number 1!

&marine; #輸出Hello, sailor number 2!

&marine; #輸出Hello, sailor number 3!

&marine; #輸出Hello, sailor number 4!

1.3      返回值

子函數裏最後一條語句的值爲返回值

如果最後是print 返回的是1,因爲它打印成功就會返回true,在特定的環境下就是1

例子:

sub larger_of_fred_or_barney {

if ($fred > $barney){

$fred;

}else{

$barney;

}

}

1.4      參數

此參數列表被傳到子程序中;這些參數可以被子程序使用。當然,這些參存放在某個地方,在Perl 中,會自動將此參數列表(此參數列表的另一個名字)自動存放在一個叫做@_的數組中。子程序可以訪問次數組變量來確定此參數的個數以及其值。需要注意實際上@_和參數列表是同一個東西,你程序中改了他,也就改了傳入的變量。

每個子程序的@_都是獨立的,程序相互調用,遞歸等都不會有問題。

1.5      子程序中的私有變量

sub max {

my($m,$n); #新的,私有變量

($m,$n) = @_; #賦值

if($m > $n) {$m} else{$n}

}

 

私有變量的改變和@_沒有關係,所以和轉入的參數也沒有關係。

1.6      子程序參數個數

sub max{

if(@_!=2){

print “WARNING! &max should get exactly two arguments!/n”;

}

#continue as before….

.

.

.

}

在設計程序時應該充分考慮轉入參數各種個樣的情況。

1.7      局部變量的作用範圍是以塊爲單位的,塊就是if,while,foreach這種有大括號的地方。

#!/usr/bin/perl

my $a = "love";

if(true)

{

my $a = "legend";

print $a."/n";

}

print $a."/n";

結果:

legend@ubuntu:~/data/study/perl$ perl 4.7

legend

love

 

申明是注意寫法:

my $fred, $barney; #錯誤!沒有定義$barney

my ($fred, $barney); #兩個均定義了

1.8      Strict pragma用法

use strict; #迫使採用更嚴格的檢測

實際上感覺和warning差不多,只不過檢測的嚴格性加大了

1.9      Return語句

我們一樣很需要return語句,因爲有時你需要在子程序中某個地方就直接返回。

所以perl一樣支持顯示的retrun語句。

1.10 關於&

必須要的時候:

調用的是自己定義的子函數,而且調用發生在定義前面

自己定義了和系統函數重名的子函數,要調用它就必須用&,好和系統函數區分。

可以省的時候,一句話,只要編譯器不會覺得有歧義,就可以省。

sub division{

$_[0] / $_[1]; #第一個參數除以第二個參數

}

my $quotient = division 355, 113; #可以省略掉括號,這種省了括號的要注意下

1.11 關於非標量的返回值

Perl可以返回非標量,列表,如果最後一條語句是列表或者給一個列表賦值,當然返回的就是列表,如果直接用retrun後不接任何東西,則返回undef

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章