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