perl解释器的代码和用perl写出来的代码一样难看

闲得蛋疼想看看几种主流脚本语言的解释器是怎么工作的。我是最早看过陈儒那本讲Python解释器的书才萌生此想法。虽然此书行文风格我厌恶至极,但它确实给了我一些启示。上次京东做活动满200减50,于是买了Programming Perl的最新影印版,研究一下perl internal自然提上日程。


初一看Perl的代码简单不塂入目,满屏的宏定义,完全无法跟踪。官网上有一些解释internal的文章,但不是很系统地介绍,内容也相当有限。从零开始探索未知代码(及风格,惯例)真令人担心啊。平时只能业余看一下,我估计这个工作不会持续长久。姑且看看吧。


从使用者的角度去看内部实现,最简单的方式是将使用的场景与内部解释的场景对应起来。而最容易捕捉到对应的时候是出错的时候。比如:

# perl -e '@a +1 =3'
Can't modify addition (+) in scalar assignment at -e line 1,at EOF

可惜这只是编译错误,运行时的对应就不这么好捕捉了。在源代码里搜一搜这个字符串,无结果。估计这种话是格式化成的,只搜前两个单词,结果能找出点东西。最后的结果是,这句话是在Perl_op_lvalue_flags里报出来的。


这个函数的原型:

Perl_op_lvalue_flags(pTHX_ OP *o,I32 type,U32 flags)


跳了好几次才搞清楚,原来pTHX_OP多加了个无使用的参数。尼玛,这种让C语言看起来不像C语言的风格,我都无力吐槽了,

相关文章

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