Perl 脚本都是内部编译为语法树,然后根据语法树解析执行每一步。察看一个脚本的语法树用模块B::Concise,简单说明如下:
B::Concise - 遍历语法树,打印每一个执行码(ops)的内容
用法:perl -MO=Concise[,OPTIONS] script
常用OPTIONS:
-basic: 默认模式,打印内存树状结构OPs
-exec: 根据执行顺序打印OPs,可同默认basic作比较
C:\>perl -MO=Concise -e "$a = 43 / 20; print $a"
a <@> leave[1 ref] vKP/REFC ->(end)
1 <0> enter ->2
2 <;> nextstate(main 1 -e:1) v:{ ->3
5 <2> sassign vKS/2 ->6
3 <$> const[NV 2.15] s ->4
- <1> ex-rv2sv sKRM*/1 ->5
4 <#> gvsv[*a] s ->5
6 <;> nextstate(main 1 -e:1) v:{ ->7
9 <@> print vK ->a
7 <0> pushmark s ->8
- <1> ex-rv2sv sK/1 ->9
8 <#> gvsv[*a] s ->9
-e syntax OK
C:\>per