我在尝试使用 Devel::Declare 创建关键字时遇到问题.在这件事上没有很多例子和教程。
我最喜欢的项目是创建一个名为 doing
的新关键字。语法类似于 Ruby 的 do
,例如:
my @arr = qw/foo bar baz/;
@arr doing $x {
print "x is $x";
};
我的想法是把它变成
for my $x (@arr) { ... }
Devel::Declare
的声明解析钩子(Hook)。我不确定这是否可能。我发现的大多数示例(来自 Devel::Declare 测试目录)用于创建
method
-style 关键字。我将不胜感激有关如何开始的一些指示,或用于处理的关键功能,或现有代码作为我的基础。
最佳答案
doing
变成一个关键字,然后 @arr doing ...
仍然需要转换成以 @arr
开头的东西,这似乎是一个相当大的障碍。 keyword
的情况下,它的工作失真最小。一些东西{ ... }
它可以变成对 keyword(
的简单调用一些其他的东西和一个可能转换的sub { ... })
.您可以看到为什么它非常适合 method
之类的东西。或 Test::Class::Sugar
.我的观点是,紧跟在数组名称之后的不是 perl 解析器正在寻找子名称的地方。它是解析器寻找操作符的地方,所以@arr doing ...
会给你一个bareword found where operator expected
在 Devel::Declare 获得任何干预机会之前出现错误。 这两个可能都可以通过改变事情来克服,以便您的关键字首先出现在行中,但是现在您有
keyword
一些东西{ ... }
其中数组的名称是一些东西,并且您牢牢地处于大多数其他模块已经雕刻出的模式中——只有当您生成一个 for 循环时,您可能会将该 block 作为真正的 block 留下而不是让它被解析为子定义。
关于perl - 使用 Devel::Declare 创建新的 Perl 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5135736/