Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 访问嵌套哈希和子例程_Perl - Fatal编程技术网

Perl 访问嵌套哈希和子例程

Perl 访问嵌套哈希和子例程,perl,Perl,考虑以下代码段: #GLOBAL SPACE HERE { #NESTED HERE my %hash = ( key1 => 'A', key2 => 'B', key3 => 'C', key4 => 'D', ); sub test { #subroutine code goes here } } 当哈希或子例程嵌套在大括号内时,如何从

考虑以下代码段:

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

    sub test
    {
        #subroutine code goes here
    }
}

当哈希或子例程嵌套在大括号内时,如何从全局范围访问它们?

哈希在词汇上的范围是块(大括号),因此只能从该块内部访问它。无论作用域如何,都可以从任何地方访问该子例程。

该变量也在编译时声明;不同之处在于子例程的作用域不是词汇性的。@ysth只有在运行时执行到达代码中声明变量的点时,才能访问该变量。该子例程在运行时的代码中的所有点都可用,无论范围如何。如果您是第一点,则否:
my$x;开始{use strict;$x=42}打印$x
。您的第二点是,是的,这就是我要说的,而不是“编译时声明的”,后者不是问题所在。@ysth,这很奇怪。