```{index} single: B::Op_private ``` # B::Op_private B::Op\_private - OP op\_private flag definitions ## SYNOPSIS ```perl 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 ``` ## DESCRIPTION This module provides four global hashes: ```perl %B::Op_private::bits %B::Op_private::defines %B::Op_private::labels %B::Op_private::ops_using ``` which contain information about the per-op meanings of the bits in the op\_private field. ### `%bits` 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: ```perl $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: ```perl $bitfield = $B::Op_private::bits{aelem}{5}; $bitfield = $B::Op_private::bits{aelem}{6}; ``` The general format of this hash ref is ```perl { # 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( 1 OPpFOO_A A 2 OPpFOO_B B 3 OPpFOO_C C )], }; ``` ### `%defines` This gives the value of every `OPp` define, e.g. ```perl $B::Op_private::defines{OPpLVAL_INTRO} == 128; ``` ### `%labels` This gives the short display label for each define, as used by `B::Concise` and `perl -Dx`, e.g. ```perl $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. ### `%ops_using` For each define, this gives a reference to an array of op names that use the flag. ```perl @ops_using_lvintro = @{ $B::Op_private::ops_using{OPp_LVAL_INTRO} }; ```