用Devel :: Declare创建一个新的Perl关键字

我试图用 Devel::Declare创建关键字时遇到麻烦.在这件事上没有很多的例子和教程.

我的宠物项目是创建一个名为“做的”的新关键字,其类似于Ruby的做法,如下所示:

my @arr = qw/foo bar baz/;
@arr doing $x {
    print "x is $x";
};

我的想法是把它变成一个为我的$x(@arr){…}语句与Devel :: Declare解析钩子.我不知道这是否可行.

我发现的大多数例子(从Devel::Declare测试目录)都是用于创建一个方法样式的关键字.

我会感谢一些关于如何开始的指针,或者关键的功能,以便能够处理,或现有的代码为我的基础.

解决方法

> Devel :: Declare不会让你收回已经解析的内容.如果你把关键字做成一个关键字,那么@arr在做…仍然需要转换成以@arr开头的东西,这似乎是一个相当大的障碍.
>因为Devel :: Declare的功能,它的魔法就会受到限制 – 它只能以特定的方式受到限制 – 它只允许你声明一个看起来像是subs的名字的关键字,在Perl会寻找一个sub的名字.它不会让你把任意的操作符放在你喜欢的地方.事实上,它可以用最少的扭曲,在你有关键字somestuff {…}的情况下,它可以变成一个简单的关键字调用(一些其他的东西和一个可能转换的子{…}).你可以看到为什么它像方法或Test :: Class :: Sugar这样的东西很好.我的观点是数组名称之后不是perl解析器正在寻找一个sub的名称;这是一个解析器正在寻找一个操作符的地方,所以@arr这样做会给你一个谜语,在Devel :: Declare有机会干预之前,操作者预期的错误会被发现.

这两个可能可以通过改变事情来克服,以便您的关键字首先出现在线上,但现在您已经有关键字somestuff {…},其中数组的名称是somestuff,而且您完全符合大多数其他模块已经被雕刻出来了 – 只有当你生成for循环时,你可能会将块作为一个真正的块而不是将其作为子定义来解析.

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...