Bei Perl wird kein Maschinencode erzeugt. Es gibt nur eine Opcode-Repräsentation. Dein Beispiel oben würde so aussehen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
$ perl5.10.0 -MO=Terse script.pl
LISTOP (0x747040) leave [1]
OP (0x747640) enter
COP (0x7acb80) nextstate
BINOP (0x7baa40) sassign
OP (0x7b2a80) undef
OP (0x7b2a00) padsv [1]
COP (0x7ace00) nextstate
BINOP (0x747100) sassign
SVOP (0x7470c0) const IV (0x79fbe8) 1
OP (0x747080) padsv [2]
LISTOP (0x747500) lineseq
COP (0x7acd80) nextstate
BINOP (0x7474c0) leaveloop
LOOP (0x7acd00) enterloop
UNOP (0x747480) null
LOGOP (0x747440) and
BINOP (0x7471c0) lt
OP (0x747140) padsv [2]
SVOP (0x747180) const IV (0x79fbd0) 5
LISTOP (0x747400) lineseq
LISTOP (0x747380) scope
OP (0x7acc80) null [177]
BINOP (0x747340) sassign
OP (0x7472c0) padsv [2]
OP (0x747280) padsv [1]
UNOP (0x747240) preinc [3]
OP (0x747200) padsv [2]
OP (0x7473c0) unstack
COP (0x7ace80) nextstate
LISTOP (0x747580) print
OP (0x7475c0) pushmark
OP (0x747540) padsv [1]
Der Perl-Interpreter ist eine virtuelle Maschine, die diesen Opcode-Baum ausführt. Vereinfacht gesagt, gibt es für jeden Opcode im Perl-Code eine C-Funktion (fängt mit Perl_pp_ an), die dann etwas Sinnvolles macht.