国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Perl > 正文

perl中的范圍聲明our-my-local介紹

2020-10-31 15:05:07
字體:
來源:轉載
供稿:網友

老實說,這個東西有點折騰人,主要是書上的表述很晦澀,其實搞懂不難。
 
our,"把名字限于某個范圍“,其實就是明確聲明一個"全局變量",雖然是在某個模塊或者函數里面定義的,外面的也可以訪問,如果已經聲明過了,再次用"our",表示此處用的是全局的那個,不是同名的私有或者局部變量

復制代碼 代碼如下:

our $PROGRAM_NAME = "waiter";
{
my  $PROGRAM_NAME = "something";
our $PROGRAM_NAME = "server"; #這里的our和外面的相同,和前句不同。
# 這里調用的代碼看到的是"server"
}
# 這里執行的代碼看到的仍然是"server".

my ,"把名字和值都限于限于某個范圍",簡單說,就是只能本層模塊或者函數可以看到這個變量,高一層的或者低一層的都看不到的。
復制代碼 代碼如下:

sub greeting1{
    my ($hello) = "How are you do?";
    greeting2();
}
 
sub greeting2{
    print "$hello/n";
}
$hello = "How are you doing?";
greeting2();
greeting1();
greeting2();

運行結果:
復制代碼 代碼如下:

How are you doing?
How are you doing?
How are you doing?

一個 How are you do? 都沒有,在greeting1中call greeting2時,greeting2看不到greeting1的私有$hello變量,只能看到外面的全局變量$hello
 
local,"把值局限于某個范圍",也有叫"動態詞法范圍",有點不好懂。我的理解,就是本層和本層下層的函數可以看到本層的變量,但是本層上一層的不可以。到底范圍是多少,不僅取決于本層的函數,還要看下一層的程序長度和深度,所以叫"動態范圍"。
復制代碼 代碼如下:

sub greeting1{
    local ($hello) = "How are you do?";
    greeting2();
}

sub greeting2{
    print "$hello/n";
}
$hello = "How are you doing?";
greeting2();
greeting1();
greeting2();


運行結果:
復制代碼 代碼如下:

How are you doing?
How are you do?
How are you doing?

跟用 my 時不一樣了吧? 此時在greeting1調用greeting2時,greeting2可以看到greeting1的局部變量$hello,外部的全局變量當然就隱藏了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武冈市| 虞城县| 绥德县| 平阳县| 佛山市| 扎囊县| 石屏县| 天柱县| 喀喇沁旗| 麻栗坡县| 襄垣县| 西安市| 天津市| 法库县| 塔河县| 邯郸县| 临夏县| 普安县| 邹平县| 信丰县| 新晃| 贡嘎县| 嘉鱼县| 南乐县| 南投县| 高唐县| 伊宁县| 白山市| 衢州市| 会理县| 浮山县| 舟山市| 扶余县| 故城县| 磐安县| 比如县| 临潭县| 岫岩| 绍兴县| 黎城县| 庄河市|