B::Op_private − OP op_private flag definitions


use B::Op_private;
# flag details for bit 7 of OP_AELEM's op_private:
my $name = $B::Op_private::bits{aelem}{7}; # OPpLVAL_INTRO
my $value = $B::Op_private::defines{$name}; # 128
my $label = $B::Op_private::labels{$name}; # LVINTRO
# the bit field at bits 5..6 of OP_AELEM's op_private:
my $bf = $B::Op_private::bits{aelem}{6};
my $mask = $bf−>{bitmask}; # etc


This module provides four global hashes:


which contain information about the per-op meanings of the bits in the op_private field.

This is indexed by op name and then bit number (0..7). For single bit flags, it returns the name of the define (if any) for that bit:

$B::Op_private::bits{aelem}{7} eq 'OPpLVAL_INTRO';

For bit fields, it returns a hash ref containing details about the field. The same reference will be returned for all bit positions that make up the bit field; so for example these both return the same hash ref:

$bitfield = $B::Op_private::bits{aelem}{5};
$bitfield = $B::Op_private::bits{aelem}{6};

The general format of this hash ref is

# The bit range and mask; these are always present.
bitmin => 5,
bitmax => 6,
bitmask => 0x60,
# (The remaining keys are optional)
# The names of any defines that were requested:
mask_def => 'OPpFOO_MASK',
baseshift_def => 'OPpFOO_SHIFT',
bitcount_def => 'OPpFOO_BITS',
# If present, Concise etc will display the value with a 'FOO='
# prefix. If it equals '−', then Concise will treat the bit
# field as raw bits and not try to interpret it.
label => 'FOO',
# If present, specifies the names of some defines and the
# display labels that are used to assign meaning to particu−
# lar integer values within the bit field; e.g. 3 is dis−
# played as 'C'.
enum => [ qw(

This gives the value of every "OPp" define, e.g.

$B::Op_private::defines{OPpLVAL_INTRO} == 128;

This gives the short display label for each define, as used by "B::Concise" and "perl −Dx", e.g.

$B::Op_private::labels{OPpLVAL_INTRO} eq 'LVINTRO';

If the label equals ’−’, then Concise will treat the bit as a raw bit and not try to display it symbolically.

For each define, this gives a reference to an array of op names that use the flag.

@ops_using_lvintro = @{ $B::Op_private::ops_using{OPp_LVAL_INTRO} };