B::Op_private(3p) Perl Programmers Reference Guide B::Op_private(3p)

B::Op_private(3p) Perl Programmers Reference Guide B::Op_private(3p) #

B::Op_private(3p) Perl Programmers Reference Guide B::Op_private(3p)

NNAAMMEE #

 B::Op_private - OP op_private flag definitions

SSYYNNOOPPSSIISS #

     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

DDEESSCCRRIIPPTTIIOONN #

 This module provides four global hashes:

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

%%bbiittss 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(
                              1   OPpFOO_A  A
                              2   OPpFOO_B  B
                              3   OPpFOO_C  C
                          )],

     };

%%ddeeffiinneess This gives the value of every “OPp” define, e.g.

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

%%llaabbeellss 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.

%%ooppss__uussiinngg 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} };

perl v5.36.3 2023-12-23 B::Op_private(3p)