El Módulo B::Concise

El módulo B::Concise permite obtener información del árbol de operaciones.

$ perl -MO=Concise -e '$x = 4'
6  <@> 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[IV 4] s ->4
-        <1> ex-rv2sv sKRM*/1 ->5
4           <#> gvsv[*x] s ->5
-e syntax OK
Cada línea contiene cinco partes:
  1. Su orden de ejecución
  2. Un indicador de tipo. Por ej. @ hace alusión a listas, un 2 indica que es un nodo binario, un 1 que es unario, $ a escalares, etc.
  3. El nombre del operando y su argumento y - si es el caso - alguna información adicional
  4. Las flags para ese operador
  5. La etiqueta de la siguiente instrucción

Las operaciones que han sido optimizadas aparecen como ex-...

Argumentos de B::Concise

Los argumentos que no comienzan por un guión se interpretan como el nombre de la subrutina cuyos OPs se desean conocer. Por ejemplo, dado el programa:

%lhp@nereida:~/Lperl/src/perl_hacks_examples/know_thy_code/find_all_global_variables$ cat -n wear_bunny_costume.pl
$ cat -n wear_bunny_costume.pl
1  use vars qw( $frog $toad );
2
3  sub wear_bunny_costume
4  {
5      my $bunny = shift;
6      $frog     = $bunny;
7      print "\$bunny is $bunny\n\$frog is $frog\n\$toad is $toad";
8  }
la llamada con argumento wear_bunny_costume muestra los OPs de esa subrutina:
$ perl -MO=Concise,wear_bunny_costume wear_bunny_costume.pl
main::wear_bunny_costume:
p  <1> leavesub[1 ref] K/REFC,1 ->(end)
-     <@> lineseq KP ->p
1        <;> nextstate(main 35 wear_bunny_costume.pl:5) v ->2
6        <2> sassign vKS/2 ->7
4           <1> shift sK/1 ->5
3              <1> rv2av[t3] sKRM/1 ->4
2                 <#> gv[*_] s ->3
5           <0> padsv[$bunny:35,36] sRM*/LVINTRO ->6
7        <;> nextstate(main 36 wear_bunny_costume.pl:6) v ->8
a        <2> sassign vKS/2 ->b
8           <0> padsv[$bunny:35,36] s ->9
-           <1> ex-rv2sv sKRM*/1 ->a
9              <#> gvsv[*frog] s ->a
b        <;> nextstate(main 36 wear_bunny_costume.pl:7) v ->c
o        <@> print sK ->p
c           <0> pushmark s ->d
-           <1> ex-stringify sK/1 ->o
-              <0> ex-pushmark s ->d
n              <2> concat[t11] sKS/2 ->o
l                 <2> concat[t9] sKS/2 ->m
j                    <2> concat[t8] sKS/2 ->k
h                       <2> concat[t6] sKS/2 ->i
f                          <2> concat[t5] sK/2 ->g
d                             <$> const[PV "$bunny is "] s ->e
e                             <0> padsv[$bunny:35,36] s ->f
g                          <$> const[PV "\n$frog is "] s ->h
-                       <1> ex-rv2sv sK/1 ->j
i                          <#> gvsv[*frog] s ->j
k                    <$> const[PV "\n$toad is "] s ->l
-                 <1> ex-rv2sv sK/1 ->n
m                    <#> gvsv[*toad] s ->n
wear_bunny_costume.pl syntax OK



Subsecciones
Casiano Rodríguez León
2012-02-29