gpt4 book ai didi

perl - 我如何在 Perl 源代码中找到某些功能的实现?

转载 作者:行者123 更新时间:2023-12-04 22:47:10 27 4
gpt4 key购买 nike

例如,我想查找 'print' 或 'foreach' 运算符的源代码。
我已经下载了 Perl 源代码并想查看此运算符的“真实”代码。

最佳答案

Perl 将源代码编译为称为操作码树的图形。同时,这个数据结构代表了你程序的语法和控制流。要了解操作码,您可能需要从 Illustrated Perl Guts (illguts) 开始.

要找出你的程序编译的操作,你可以这样称呼它:

  • perl -MO=Concise script.pl – 获取语法树中的操作码
  • perl -MO=Concise,-exec script.pl-exec选项改为按执行顺序对操作进行排序。有时,这不那么令人困惑。
  • perl -MO=Concise,foo script.pl – 转储 foo 的操作子程序。

  • 典型的操作码如下所示:
    4 <$> const[PV "007B"] s/FOLD ->5
    ^ ^ ^ ^ ^
    | | | | The next op in execution order
    | | | Flags for this op, documented e.g. in illguts. "s" is
    | | | scalar context. After the slash, op-specific stuff
    | | The actual name of the op, may list further arguments
    | The optype ($: unop, 2: binop, @:listop) – not really useful
    The op number

    操作声明为 PP(pp_const) .要搜索该声明,请使用 ack tool ,这是一个智能的递归 grep使用 Perl 正则表达式。要搜索源代码顶级目录中的所有 C 文件和头文件,我们执行以下操作:
    $ ack 'pp_const' *.c *.h

    输出(这里没有颜色):
    op.c
    29: * points to the pp_const() function and to an SV containing the constant
    30: * value. When pp_const() is executed, its job is to push that SV onto the

    pp_hot.c
    40:PP(pp_const)

    opcode.h
    944: Perl_pp_const,

    pp_proto.h
    43:PERL_CALLCONV OP *Perl_pp_const(pTHX);

    所以它在 pp_hot.c 中声明,第 40 行。我倾向于做 vim pp_hot.c +40去那里。然后我们看到定义:
    PP(pp_const)
    {
    dVAR;
    dSP;
    XPUSHs(cSVOP_sv);
    RETURN;
    }

    要理解这一点,您应该对 Perl API 有一点了解。 ,也许会写一点XS。

    关于perl - 我如何在 Perl 源代码中找到某些功能的实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19888824/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com