# B::Op_private - man - phpman

## NAME
    [B::Op_private](https://www.chedong.com/phpMan.php/perldoc/B%3A%3AOpprivate/markdown) - OP op_private flag definitions

## SYNOPSIS
        use [B::Op_private](https://www.chedong.com/phpMan.php/perldoc/B%3A%3AOpprivate/markdown);

        # flag details for bit 7 of OP_AELEM's op_private:
        my $name  = $[B::Op_private::bits](https://www.chedong.com/phpMan.php/perldoc/B%3A%3AOpprivate%3A%3Abits/markdown){aelem}{7}; # OPpLVAL_INTRO
        my $value = $[B::Op_private::defines](https://www.chedong.com/phpMan.php/perldoc/B%3A%3AOpprivate%3A%3Adefines/markdown){$name}; # 128
        my $label = $[B::Op_private::labels](https://www.chedong.com/phpMan.php/perldoc/B%3A%3AOpprivate%3A%3Alabels/markdown){$name};  # LVINTRO

        # the bit field at bits 5..6 of OP_AELEM's op_private:
        my $bf  = $[B::Op_private::bits](https://www.chedong.com/phpMan.php/perldoc/B%3A%3AOpprivate%3A%3Abits/markdown){aelem}{6};
        my $mask = $bf->{bitmask}; # etc

## DESCRIPTION
    This module provides four global hashes:

        %[B::Op_private::bits](https://www.chedong.com/phpMan.php/perldoc/B%3A%3AOpprivate%3A%3Abits/markdown)
        %[B::Op_private::defines](https://www.chedong.com/phpMan.php/perldoc/B%3A%3AOpprivate%3A%3Adefines/markdown)
        %[B::Op_private::labels](https://www.chedong.com/phpMan.php/perldoc/B%3A%3AOpprivate%3A%3Alabels/markdown)
        %[B::Op_private::ops_using](https://www.chedong.com/phpMan.php/perldoc/B%3A%3AOpprivate%3A%3Aopsusing/markdown)

    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:

       $[B::Op_private::bits](https://www.chedong.com/phpMan.php/perldoc/B%3A%3AOpprivate%3A%3Abits/markdown){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](https://www.chedong.com/phpMan.php/perldoc/B%3A%3AOpprivate%3A%3Abits/markdown){aelem}{5};
        $bitfield = $[B::Op_private::bits](https://www.chedong.com/phpMan.php/perldoc/B%3A%3AOpprivate%3A%3Abits/markdown){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
                             )],

        };

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

        $[B::Op_private::defines](https://www.chedong.com/phpMan.php/perldoc/B%3A%3AOpprivate%3A%3Adefines/markdown){OPpLVAL_INTRO} == 128;

  %labels
    This gives the short display label for each define, as used by "[B::Concise](https://www.chedong.com/phpMan.php/perldoc/B%3A%3AConcise/markdown)" and "perl -Dx", e.g.

        $[B::Op_private::labels](https://www.chedong.com/phpMan.php/perldoc/B%3A%3AOpprivate%3A%3Alabels/markdown){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.

        @ops_using_lvintro = @{ $[B::Op_private::ops_using](https://www.chedong.com/phpMan.php/perldoc/B%3A%3AOpprivate%3A%3Aopsusing/markdown){OPp_LVAL_INTRO} };

