我在尝试使用Devel::Declare创建关键字时遇到问题。在这个问题上没有很多例子和教程。
我的宠物项目是创建一个名为doing
的新关键字,其语法类似于Ruby的do
,例如:
my @arr = qw/foo bar baz/;
@arr doing $x {
print "x is $x";
};
我的想法是将它变成带有for my $x (@arr) { ... }
解析钩子的Devel::Declare
语句。我不确定这是否可行。
我发现的大部分示例(来自Devel::Declare测试目录)都是用于创建method
- 样式关键字。
我很欣赏一些关于如何开始使用的指针,或者用于处理的关键函数,或者基于我的现有代码。
答案 0 :(得分:14)
doing
转换为关键字,那么@arr doing ...
仍然需要转换为以#{1}}启动的内容,这似乎是一个相当大的障碍。< / LI>
@arr
somestuff keyword
的情况下,它可以解决最小的扭曲,它可以变成对{ ... }
的其他一些简单的调用东西和可能已经改造的 keyword(
。你可以看到它为什么能够很好地适应sub { ... })
或method
之类的东西。我的观点是,在数组名称之后不是,perl解析器正在寻找sub的名称;它是解析器正在寻找运算符的地方,因此{6}会在Devel :: Declare有机会进行干预之前给出Test::Class::Sugar
错误。可以通过更改内容来解决这两个问题,以便您的关键字首先显示 ,但现在您已@arr doing ...
somestuff {{ 1}}数组的名称是 somestuff ,并且你坚定地处于大多数其他模块已经雕刻出来的模式中 - 只有当你生成一个for循环时,你才会' ll可能会将块作为一个真正的块而不是让它被解析为一个子定义。