GSP
Quick Navigator

Search Site

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

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
Opcodes(3) User Contributed Perl Documentation Opcodes(3)

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'

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.

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 opcode.pl 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
    

Example:

  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 opcode.pl:

    '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 opcode.pl. 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 opcode.pl:

    '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.

Safe -- Opcode and namespace limited execution compartments

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

CPAN Testers: <http://cpantesters.org/distro/O/Opcodes>

Travis: https://travis-ci.org/rurban/Opcodes.png <https://travis-ci.org/rurban/Opcodes/>

Coveralls: https://coveralls.io/repos/rurban/Opcodes/badge.png <https://coveralls.io/r/rurban/Opcodes?branch=master>

Reini Urban "rurban@cpan.org" 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.

2014-07-16 perl v5.32.1

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

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