perl中的范圍聲明our-my-local介紹
老實說,這個東西有點折騰人,主要是書上的表述很晦澀,其實搞懂不難。
our,"把名字限于某個范圍“,其實就是明確聲明一個"全局變量",雖然是在某個模塊或者函數(shù)里面定義的,外面的也可以訪問,如果已經(jīng)聲明過了,再次用"our",表示此處用的是全局的那個,不是同名的私有或者局部變量
our $PROGRAM_NAME = "waiter";
{
my $PROGRAM_NAME = "something";
our $PROGRAM_NAME = "server"; #這里的our和外面的相同,和前句不同。
# 這里調(diào)用的代碼看到的是"server"
}
# 這里執(zhí)行的代碼看到的仍然是"server".
my ,"把名字和值都限于限于某個范圍",簡單說,就是只能本層模塊或者函數(shù)可以看到這個變量,高一層的或者低一層的都看不到的。
sub greeting1{
my ($hello) = "How are you do?";
greeting2();
}
sub greeting2{
print "$hello\n";
}
$hello = "How are you doing?";
greeting2();
greeting1();
greeting2();
運行結(jié)果:
How are you doing?
How are you doing?
How are you doing?
一個 How are you do? 都沒有,在greeting1中call greeting2時,greeting2看不到greeting1的私有$hello變量,只能看到外面的全局變量$hello
local,"把值局限于某個范圍",也有叫"動態(tài)詞法范圍",有點不好懂。我的理解,就是本層和本層下層的函數(shù)可以看到本層的變量,但是本層上一層的不可以。到底范圍是多少,不僅取決于本層的函數(shù),還要看下一層的程序長度和深度,所以叫"動態(tài)范圍"。
sub greeting1{
local ($hello) = "How are you do?";
greeting2();
}
sub greeting2{
print "$hello\n";
}
$hello = "How are you doing?";
greeting2();
greeting1();
greeting2();
運行結(jié)果:
How are you doing?
How are you do?
How are you doing?
跟用 my 時不一樣了吧? 此時在greeting1調(diào)用greeting2時,greeting2可以看到greeting1的局部變量$hello,外部的全局變量當(dāng)然就隱藏了。
相關(guān)文章
perl之print,printf,sprintf使用案例詳解
這篇文章主要介紹了perl之print,printf,sprintf使用案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09perl對長度不一文本的行列進(jìn)行置換的實現(xiàn)代碼
處理生物數(shù)據(jù)時,常常需要行列置換,這在R里面異常的簡單容易,一個t()就解決了2013-02-02Windows10下安裝配置 perl 環(huán)境的詳細(xì)教程
Perl 最重要的特性是Perl內(nèi)部集成了正則表達(dá)式的功能,以及巨大的第三方代碼庫CPAN。這篇文章主要介紹了Windows10下安裝配置 perl 環(huán)境的詳細(xì)教程,需要的朋友可以參考下2020-12-12Perl圖形化包管理工具PPM學(xué)習(xí)使用筆記
這篇文章主要介紹了Perl圖形化包管理工具PPM學(xué)習(xí)使用筆記,本文詳細(xì)講解了什么是PPM、PPM界面的功能按鈕說明、PPM如何安裝卸載包等內(nèi)容,需要的朋友可以參考下2015-06-06perl pop push shift unshift實例介紹
perl的pop跟push操作數(shù)組的最右邊,shift跟unshift操作數(shù)組的最左邊2013-02-02