相关疑难解决方法(0)

为什么即使使用前向声明,我也不能在BEGIN块中调用后来定义的子?

这有效:

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

4
推荐指数
1
解决办法
326
查看次数

标签 统计

perl ×1