Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Contact Us
Online Help
Domain Status
Man Pages

Virtual Servers

Topology Map

Server Agreement
Year 2038

USA Flag



Man Pages

Manual Reference Pages  -  OPCODES (3)

.ds Aq ’


Opcodes - More Opcodes information from opnames.h and opcode.h



  use Opcodes;
  print "Empty opcodes are null and ",
    join ",", map {opname $_}, opaliases(opname2code(null));

  # All LOGOPs
  perl -MOpcodes -e$,=q( );print map {opname $_} grep {opclass($_) == 2} 1..opcodes

  # Ops which can return other than op->next
  perl -MOpcodes -e$,=q( );print map {opname $_} grep {Opcodes::maybranch $_} 1..opcodes


Operator Names and Operator Lists

The canonical list of operator names is the contents of the array PL_op_name, defined and initialised in file opcode.h of the Perl source distribution (and installed into the perl library).

Each operator has both a terse name (its opname) and a more verbose or recognisable descriptive name. The opdesc function can be used to return a the description for an OP.
an operator name (opname) Operator names are typically small lowercase words like enterloop, leaveloop, last, next, redo etc. Sometimes they are rather cryptic like gv2cv, i_ncmp and ftsvtx.
an OP opcode The opcode information functions all take the integer code, 0..MAX0, MAXO being accessed by scalar @opcodes, the length of the opcodes array.

Opcode Information

Retrieve information of the Opcodes. All are available for export by the package. Functions names starting with op are automatically exported.
opcodes In a scalar context opcodes returns the number of opcodes in this version of perl (361 with perl-5.10).

In a list context it returns a list of all the operators with its properties, a list of [ opcode opname ppaddr check opargs ].

opname (OP) Returns the lowercase name without pp_ for the OP, an integer between 0 and MAXO.
ppaddr (OP) Returns the address of the ppaddr, which can be used to get the aliases for each opcode.
check (OP) Returns the address of the check function.
opdesc (OP) Returns the string description of the OP.
opargs (OP) Returns the opcode args encoded as integer of the opcode. See below or for the encoding details.

  opflags 1-128 + opclass 1-13 << 9 + argnum 1-15.. << 13

argnum (OP) Returns the arguments and types encoded as number acccording to the following table, 4 bit for each argument.

    S,  1,            # scalar
    L,  2,            # list
    A,  3,            # array value
    H,  4,            # hash value
    C,  5,            # code value
    F,  6,            # file value
    R,  7,            # scalar reference

  + ?,  8,            # optional


  argnum(opname2code(bless)) => 145
  145 = 0b10010001 => S S?

  first 4 bits 0001 => 1st arg is a Scalar,
  next 4 bits  1001 => (bit 8+1) 2nd arg is an optional Scalar

opclass (OP) Returns the op class as number according to the following table from

    0,  0,            # baseop
    1,  1,            # unop
    2,  2,            # binop
    |,  3,            # logop
    @,  4,            # listop
    /,  5,            # pmop
    $,  6,            # svop_or_padop
    #,  7,            # padop
    ",  8,            # pvop_or_svop
    {,  9,            # loop
    ;,  10,           # cop
    %,  11,           # baseop_or_unop
    -,  12,           # filestatop
    },  13,           # loopexop

opflags (OP) Returns op flags as number according to the following table from In doubt see your perl source. Warning: There is currently an attempt to change that, but I posted a fix

    m =>  OA_MARK,            # needs stack mark
    f =>  OA_FOLDCONST,       # fold constants
    s =>  OA_RETSCALAR,       # always produces scalar
    t =>  OA_TARGET,          # needs target scalar
    T =>  OA_TARGET | OA_TARGLEX,     # ... which may be lexical
    i =>  OA_RETINTEGER,      # always produces integer (this bit is in question)
    I =>  OA_OTHERINT,        # has corresponding int op
    d =>  OA_DANGEROUS,       # danger, unknown side effects
    u =>  OA_DEFGV,           # defaults to $_

plus not from

    n => OA_NOSTACK,          # nothing on the stack, no args and return
    N => OA_MAYBRANCH         # No next. may return other than PL_op->op_next, maybranch

These not yet:

    S =>  OA_MAYSCALAR        # retval may be scalar
    A =>  OA_MAYARRAY         # retval may be array
    V =>  OA_MAYVOID          # retval may be void
    F =>  OA_RETFIXED         # fixed retval type, either S or A or V

OA_* constants All OA_ flag, class and argnum constants from op.h are exported. Addionally new OA_ flags have been created which are needed for B::CC.
opaliases (OP) Returns the opcodes for the aliased opcode functions for the given OP, the ops with the same ppaddr.
opname2code (OPNAME) Does a reverse lookup in the opcodes list to get the opcode for the given name.
maybranch (OP) Returns if the OP function may return not op->op_next.

Note that not all OP classes which have op->op_other, op->op_first or op->op_last (higher then UNOP) are actually returning an other next op than op->op_next.

  opflags(OP) & 16384


Opcode — The Perl CORE Opcode module for handling sets of Opcodes used by Safe.

SafeOpcode and namespace limited execution compartments

B::CC — The optimizing perl compiler uses this module. Jit also,
but only the static information


CPAN Testers: <>

Travis: <>

Coveralls: <>


Reini Urban 2010, 2014


Copyright 1995, Malcom Beattie. Copyright 1996, Tim Bunce. Copyright 2010, 2014 Reini Urban. All rights reserved.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

Search for    or go to Top of page |  Section 3 |  Main Index

perl v5.20.3 OPCODES (3) 2014-07-16

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with manServer 1.07.