加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 22:00:01 所属栏目:大数据 来源:网络整理
导读:我试图用 Devel::Declare创建关键字时遇到麻烦.在这件事上没有很多的例子和教程. 我的宠物项目是创建一个名为“做的”的新关键字,其类似于Ruby的做法,如下所示: my @arr = qw/foo bar baz/;@arr doing $x { print "x is $x";}; 我的想法是把它变成一个为我
我试图用 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循环时,你可能会将块作为一个真正的块而不是将其作为子定义来解析.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读