如何使用B::Hooks操作perl解析器

如何使用B::Hooks操作perl解析器,perl,xs,Perl,Xs,我希望使用perl解析器操作。看起来人们使用的是各种B::hook模块。我想知道: 对于没有XS经验的人来说,这是最好的起点。有相关的博客帖子吗 创建新操作员需要做多少工作,例如: $a~>1~>2~>3 ~>的工作方式类似于->,但它不会尝试调用undef,而是简单地将undef返回到LHS 虽然源过滤器可以工作,但我更感兴趣的是如何在更深层次上操作解析器。我不相信可以添加中缀运算符(其操作数在运算符之前和之后),更不用说符号运算符(与命名运算符相反),但是您可以编写一个op检查器来替换方法调

我希望使用perl解析器操作。看起来人们使用的是各种
B::hook
模块。我想知道:

  • 对于没有
    XS
    经验的人来说,这是最好的起点。有相关的博客帖子吗

  • 创建新操作员需要做多少工作,例如:

    $a~>1~>2~>3

  • ~>
    的工作方式类似于
    ->
    ,但它不会尝试调用
    undef
    ,而是简单地将
    undef
    返回到LHS


    虽然源过滤器可以工作,但我更感兴趣的是如何在更深层次上操作解析器。

    我不相信可以添加中缀运算符(其操作数在运算符之前和之后),更不用说符号运算符(与命名运算符相反),但是您可以编写一个op检查器来替换方法调用。这意味着您可能会导致
    ->foo
    表现不同。通过将模块编写为pragma,您可以将模块的效果限制在词法范围内(例如,
    {use mypragma;…}
    )。

    这听起来是一个有趣的功能。:)当我在做
    if($dom->at('div')->at('h1')时感到厌烦时,我想到了这一点{
    在Mojo::DOM中,getting不能调用undefined,因为
    div
    不存在:)我还没有弄明白这一点,但这看起来很有希望:您是否考虑过使用
    autobox
    ?一个带有基本
    自动加载
    例程的非常简单的包就足够了。您没有新的操作符,但添加了所有可能的met有一些方法可以
    undef
    。这可能会对性能产生可怕的影响。例如:
    使用autobox undef=>'silentindef';…您的代码…package silentindef;sub AUTOLOAD{sub{}}
    。当我过去做过一些X时(此时我完全忘记了)我从添加新操作符开始,我可能从