perl:无法在定义var之前获取全局变量

时间:2015-01-29 11:57:17

标签: perl variables scope

例如:

#!/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?

2 个答案:

答案 0 :(得分:2)

每个Perl程序基本上处理两个阶段:编译阶段和运行阶段。在编译阶段,mysub被处理,因此Perl现在知道您将使用全局可访问的词法变量%h。但是,它没有填充 - 这将在运行阶段发生。但是,在填充main之前调用%h

答案 1 :(得分:2)

my=无关。在CS术语中,%h实际上是在调用main之前定义的(my)。您已经问过为什么没有执行任务(=)。

main()在分配到%h之前执行,因为在代码中main()的分配之前找到了%h

完全相同的原因
print("abc\n");
print("def\n");

永远不会打印

def
abc