Perl-14—範圍

來源:互聯網
上載者:User

範圍(Scope)就是變數的有效範圍、可見範圍,變數只有在範圍中才會有效;

Perl中,資料的範圍分為全域範圍、詞法範圍和動態範圍;Pe rl5中,可以使用關鍵字my和local來聲明變數以及限定變數的範圍;

1、詞法域:Lexical

使用my關鍵字聲明的變數稱為詞法變數,詞法變數的範圍就是詞法域;詞法變數是只限於所在範圍的局部變數;產生的詞法變數不在包的符號表內,只能在自身所在的塊中存在和訪問;

使用my關鍵字聲明詞法變數的文法為:

my  (@Array);

my  ($Variable,@Array);

這樣就聲明了一個或多個詞法變數,Perl5中,這些詞法變數只能在聲明它們的代碼塊記憶體在和訪問,一旦離開了聲明這些詞法變數的代碼塊,這些詞法變數就不能再被訪問,就像在塊內為這些詞法變數分配了一定的儲存空間,塊結束的時候又釋放了儲存這些詞法變數的儲存空間,釋放了之後,就不能再訪問了;

使用詞法變數可以控制變數的範圍,以減少不必要的損失;比如:避免由於使用了同名的變數而導致變數的值被覆蓋;通常情況下,Perl5程式員都使用my關鍵字來聲明變數;

詞法變數的存在性不能理解為離開它所在的範圍就結束,詞法變數的存在時間又一定的規則;Perl5中對每一個詞法變數都設定了一個引用計數,由這個引用計數來決定該詞法變數的存在時間。當離開詞法變數的範圍的時候,這個詞法變數不一定就結束。每個詞法變數都有自己的引用計數。在詞法變數定義和聲明的時候,引用計數為1。當詞法變數所在的塊結束時,引用計數遞減1。當詞法變數的引用計數為0時,Perl5解譯器會自動釋放這個詞法變數在記憶體中的空間;

詞法變數是一種私人變數,只能由它所在的塊中的對象來引用。詞法變數的這些特性使得Perl5能夠實現子程式的遞迴調用。子程式的遞迴調用就是指子程式在執行的過程中又直接或間接地調用了這個子程式本身;子程式在遞迴調用的過程中要避免無終止的自身調用;

二、動態範圍:

在Perl5中使用local關鍵字來指定變數的動態範圍,但是使用my關鍵字比使用local關鍵字更有效;動態範圍變數的作用是暫時改變已有的全域變數的值。動態範圍變數只在聲明和定義它的塊以及它所調用的子程式中可以訪問,在定義和聲明動態範圍變數的塊之外,是不能訪問這些動態範圍變數的;在動態範圍變數替換全域變數的同時會自動備份全域變數,當動態範圍變數離開所在的範圍時,全域變數自動回復原值,即:動態範圍變數時動態變化的;定義動態範圍變數的文法如下:

local (@Array);

local  ($Variable,@Array);

這樣就可以定義一個或多個動態範圍變數;

動態範圍變數的這些特性,使得其在程式中使用諸如ARGV、$_、@INC和$"等內部全域變數時非常有用;在所在範圍中修改全域變數的原值時,必須及時地恢複全域變數的值。動態範圍變數能夠自動儲存和恢複全域變數的修改備份;

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.