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 块。 veopimop 变量可能包含用于检查版本或导入请求元素的操作码:

/* 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 源代码: