perl中的范圍聲明our-my-local介紹
老實(shí)說(shuō),這個(gè)東西有點(diǎn)折騰人,主要是書上的表述很晦澀,其實(shí)搞懂不難。
our,"把名字限于某個(gè)范圍“,其實(shí)就是明確聲明一個(gè)"全局變量",雖然是在某個(gè)模塊或者函數(shù)里面定義的,外面的也可以訪問(wèn),如果已經(jīng)聲明過(guò)了,再次用"our",表示此處用的是全局的那個(gè),不是同名的私有或者局部變量
our $PROGRAM_NAME = "waiter";
{
my $PROGRAM_NAME = "something";
our $PROGRAM_NAME = "server"; #這里的our和外面的相同,和前句不同。
# 這里調(diào)用的代碼看到的是"server"
}
# 這里執(zhí)行的代碼看到的仍然是"server".
my ,"把名字和值都限于限于某個(gè)范圍",簡(jiǎn)單說(shuō),就是只能本層模塊或者函數(shù)可以看到這個(gè)變量,高一層的或者低一層的都看不到的。
sub greeting1{
my ($hello) = "How are you do?";
greeting2();
}
sub greeting2{
print "$hello\n";
}
$hello = "How are you doing?";
greeting2();
greeting1();
greeting2();
運(yùn)行結(jié)果:
How are you doing?
How are you doing?
How are you doing?
一個(gè) How are you do? 都沒(méi)有,在greeting1中call greeting2時(shí),greeting2看不到greeting1的私有$hello變量,只能看到外面的全局變量$hello
local,"把值局限于某個(gè)范圍",也有叫"動(dòng)態(tài)詞法范圍",有點(diǎn)不好懂。我的理解,就是本層和本層下層的函數(shù)可以看到本層的變量,但是本層上一層的不可以。到底范圍是多少,不僅取決于本層的函數(shù),還要看下一層的程序長(zhǎng)度和深度,所以叫"動(dòng)態(tài)范圍"。
sub greeting1{
local ($hello) = "How are you do?";
greeting2();
}
sub greeting2{
print "$hello\n";
}
$hello = "How are you doing?";
greeting2();
greeting1();
greeting2();
運(yùn)行結(jié)果:
How are you doing?
How are you do?
How are you doing?
跟用 my 時(shí)不一樣了吧? 此時(shí)在greeting1調(diào)用greeting2時(shí),greeting2可以看到greeting1的局部變量$hello,外部的全局變量當(dāng)然就隱藏了。
相關(guān)文章
perl 標(biāo)量和運(yùn)算符的一些知識(shí)介紹
有關(guān)perl的標(biāo)量和運(yùn)算符的一些知識(shí),有需要的朋友可以看看2013-02-02
perl跳過(guò)首行讀取文件的實(shí)現(xiàn)代碼
要求直接跳過(guò)第一行,然后讀取后面的內(nèi)容,以下代碼來(lái)自網(wǎng)絡(luò),感謝原作者的辛苦勞動(dòng),順祝新年快樂(lè)2013-02-02
perl AnyEvent簡(jiǎn)單介紹和入門知識(shí)
這篇文章主要介紹了perl AnyEvent簡(jiǎn)單介紹和入門知識(shí),AnyEvent 是一個(gè)性能非常好的基于事件驅(qū)動(dòng)的框架,需要的朋友可以參考下2014-09-09

