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,这很奇怪。