perl 源代码中的“use”在哪里定义?
Where is `use` defined in the perl source code?
有谁知道 use
在源代码和编译阶段的确切位置?我没有看到它在寻找 CORE::GLOBAL::use
,而且我不确定如何深入寻找它。这是一个相当模糊的术语。
它在 CORE
.
perl -w -E 'CORE::use Data::Dumper; print Dumper("a")'
use
语法在解析器 (perly.y
) 中定义。摘录:
| USE startsub
{ CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ }
BAREWORD BAREWORD optlistexpr ';'
{
SvREFCNT_inc_simple_void(PL_compcv);
utilize(, , , , );
parser->parsed_sub = 1;
$$ = NULL;
}
不知道 yacc,我不知道它在做什么。
utilize()
函数是 Perl_utilize()
来自 op.c
。此代码创建一个包含 require
的 BEGIN 块。 veop
和 imop
变量可能包含用于检查版本或导入请求元素的操作码:
/* Fake up the BEGIN {}, which does its thing immediately. */
newATTRSUB(floor,
newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
NULL,
NULL,
op_append_elem(OP_LINESEQ,
op_append_elem(OP_LINESEQ,
newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
newSTATEOP(0, NULL, veop)),
newSTATEOP(0, NULL, imop) ));
链接到 Github 镜像上的 v5.26.0 源代码:
有谁知道 use
在源代码和编译阶段的确切位置?我没有看到它在寻找 CORE::GLOBAL::use
,而且我不确定如何深入寻找它。这是一个相当模糊的术语。
它在 CORE
.
perl -w -E 'CORE::use Data::Dumper; print Dumper("a")'
use
语法在解析器 (perly.y
) 中定义。摘录:
| USE startsub
{ CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ }
BAREWORD BAREWORD optlistexpr ';'
{
SvREFCNT_inc_simple_void(PL_compcv);
utilize(, , , , );
parser->parsed_sub = 1;
$$ = NULL;
}
不知道 yacc,我不知道它在做什么。
utilize()
函数是 Perl_utilize()
来自 op.c
。此代码创建一个包含 require
的 BEGIN 块。 veop
和 imop
变量可能包含用于检查版本或导入请求元素的操作码:
/* Fake up the BEGIN {}, which does its thing immediately. */
newATTRSUB(floor,
newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")),
NULL,
NULL,
op_append_elem(OP_LINESEQ,
op_append_elem(OP_LINESEQ,
newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)),
newSTATEOP(0, NULL, veop)),
newSTATEOP(0, NULL, imop) ));
链接到 Github 镜像上的 v5.26.0 源代码: