这有效:
use strict;
X("xxxxxx");
sub X { print shift;}
Run Code Online (Sandbox Code Playgroud)
这会产生错误:
use strict;
BEGIN {
X("xxxxxx");
}
sub X { print shift;}
Run Code Online (Sandbox Code Playgroud)
错误:
Undefined subroutine &main::X called at ./test.pl line 5.
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为我们在执行sub ...时处于编译阶段的中间,所以编译器还没有到达子声明/定义.
...但是:添加前向声明(在BEGIN块之前或之内)没有帮助:
use strict;
sub X;
BEGIN {
X("xxxxxx");
}
sub X { print shift;}
Run Code Online (Sandbox Code Playgroud)
为什么在BEGIN块中调用函数时前向声明不起作用?我认为它发生在编译阶段,即my声明的方式.
perldoc perlsub 似乎没有任何消息.
perl ×1