2014-02-06 101 views
0

考慮下面的代碼片段:訪問嵌套哈希和子程序

#GLOBAL SPACE HERE 
{ 
    #NESTED HERE 
    my %hash = (
     key1 => 'A', 
     key2 => 'B', 
     key3 => 'C', 
     key4 => 'D', 
    ); 

    sub test 
    { 
     #subroutine code goes here 
    } 
} 

我將如何訪問這兩個散列或從全球範圍內已嵌套在大括號內當子程序?

回答

2

散列在詞彙上被限定爲塊(大括號),所以它只能從該塊內部訪問。子程序可以從任何地方訪問,無論範圍如何。

+0

該變量也是在編譯時聲明的;不同之處在於子程序不在詞彙範圍內。 – ysth

+0

@ysth在運行時執行到達聲明代碼的位置之前,變量不能被訪問。該子例程在運行時的代碼中的所有點都可用,而與範圍無關。 – TLP

+0

重申你的第一點,不:'my $ x; BEGIN {嚴格使用; $ x = 42} print $ x'。關於你的第二點,是的,這就是我所說的你應該說的,而不是「在編譯時聲明」,後者不是問題。 – ysth