例如:
#!/usr/bin/perl
use Data::Dumper;
main();
my %h = (
name => 'abc',
value => '123',
);
sub main {
print "Dumping the hash...\n";
print Dumper(%h);
}
1;
结果是:
Dumping the hash...
因此perl可以在实现之前调用main,为什么它不知道甚至早于main()定义的全局var%h?
答案 0 :(得分:2)
每个Perl程序基本上处理两个阶段:编译阶段和运行阶段。在编译阶段,my
和sub
被处理,因此Perl现在知道您将使用全局可访问的词法变量%h
。但是,它没有填充 - 这将在运行阶段发生。但是,在填充main
之前调用%h
。
答案 1 :(得分:2)
my
和=
无关。在CS术语中,%h
实际上是在调用main
之前定义的(my
)。您已经问过为什么没有执行任务(=
)。
main()
在分配到%h
之前执行,因为在代码中main()
的分配之前找到了%h
。
与
完全相同的原因print("abc\n");
print("def\n");
永远不会打印
def
abc