乙個有關typeglob問題的解答

2021-04-24 23:28:16 字數 1065 閱讀 8417

這裡不是perl的百科全書,這裡http://www.perl.org/才是。

個人理解,難免有錯。

[預備知識]

在perl中,由our宣告的變數均會被視為全域性變數;由my宣告的變數均會被視為區域性變數;由local宣告的變數是同名全域性變數的本地拷貝。

或者說:由local宣告的變數均會被視為全域性變數。

所有的全域性變數,既在包符號表中,也會被登記在全域性符號表中。可以通過兩種形來訪問乙個全域性變數。第一種是包符號表,第二種是typeglob。

舉例:our $test;

$main::test = "你";               # package style

print $;            # typeglob style

$ = "好";          # typeglob style

print $main::test;                  # package style

結果:你好

這上面四行都是訪問了同一變數,但採用了不同的形式。

[問題和解答]

問題:為什麼下面第五行不可以是/*fh?

sub newopen

$fh = newopen("c://fh.txt");

while(<$fh>)

解答:原因在於第三行的宣告,fh會被視為乙個全域性變數,在newopen()函式中生成了乙個fh的本地拷貝。在這個函式中,對fh的所有賦值只影響到這個本地拷貝。當newopen()執行完畢時,這個本地拷貝的生命結束,全域性變數fh仍是空值。因此,第四行open(fh,$path)只會對這個本地拷貝賦值,第五行如果返回/*fh,第七行相當於$fh = *fh,$fh也是空值,當然整個程式會出錯。

下面這些都不會出錯。不用我提醒,你的c盤下面需要有乙個fh.txt檔案吧!

sub newopen

$fh = newopen("c://fh.txt");

while(<$fh>)

sub newopen

$fh = newopen("c://fh.txt");

while(<$fh>)

請教乙個有關執行緒的問題

請教乙個有關執行緒的問題,我以前沒有用過執行緒,看msdn上的控制台例子,發現用斷點跟蹤和直接執行的結果不一樣。搞不清執行緒到底是如何執行的。我的 是 using system using system.threading namespace threadtest n i thread.sleep ...

有關動態多維陣列的乙個問題

同樣的錯誤,即使你的年齡越大,它會犯同樣的,opps.最近做的c 和c 混合程式設計。昨天上演了一出棧平衡了很長一段時間,今天,我們攻克了bug。既高興又傷心。看看 unsigned char bytes2d unsigned char bytesarray for int i 0 i不得不說,初學...

有關java私有變數訪問的乙個問題

1 訪問非私有 private 變數 class a class b 編譯後 生成b.class和a.class兩個檔案,b.class反編譯的結果如下 class b public static void main string args 結論 在b中,通過類訪問靜態變數和通過例項訪問變數,增加了...