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

來源:互聯網
上載者:User

老實說,這個東西有點折騰人,主要是書上的表述很晦澀,其實搞懂不難。
 
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,外部的全域變數當然就隱藏了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.