2014-02-06 64 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