如何使用 B::Hooks 来操作 perl 解析器
How to use B::Hooks to manipulate the perl parser
我正在尝试使用 perl 解析器操作。看起来各种 B::Hooks
模块都是人们使用的。我在想:
对于(还)没有 XS
经验的人来说是最好的起点。有相关的博文吗?
新建一个算子需要多少工作量,例如:
$a~>one~>two~>three
~>
会像 ->
一样工作,但它不会尝试调用 undef
而是简单地 return undef
到 LHS。
尽管源代码过滤器可以工作 -- 我更感兴趣的是了解如何在更深层次上操作解析器。
我认为您不能添加中缀运算符(操作数在运算符前后的运算符),更不用说符号运算符(与命名运算符相反),但您可以编写一个运算检查器来替换方法电话。这意味着您可以使 ->foo
表现不同。通过将模块编写为 pragma,可以将模块的效果限制在词法范围内(例如 { use mypragma; ...}
)。
我正在尝试使用 perl 解析器操作。看起来各种 B::Hooks
模块都是人们使用的。我在想:
对于(还)没有
XS
经验的人来说是最好的起点。有相关的博文吗?新建一个算子需要多少工作量,例如:
$a~>one~>two~>three
~>
会像 ->
一样工作,但它不会尝试调用 undef
而是简单地 return undef
到 LHS。
尽管源代码过滤器可以工作 -- 我更感兴趣的是了解如何在更深层次上操作解析器。
我认为您不能添加中缀运算符(操作数在运算符前后的运算符),更不用说符号运算符(与命名运算符相反),但您可以编写一个运算检查器来替换方法电话。这意味着您可以使 ->foo
表现不同。通过将模块编写为 pragma,可以将模块的效果限制在词法范围内(例如 { use mypragma; ...}
)。