B::Op_private(3pm)

🌸 NAME 🌸

okay so bestie, this is B::Op_private(3pm) from the Perl Programmers Reference Guide, and it's literally the page for OP op_private flag definitions. That's the whole main-character assignment. πŸ’–

πŸ’… SYNOPSIS πŸ’…

peep the synopsis, no cap:

    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 β€” yes, four β€” and they are:

    %B::Op_private::bits
    %B::Op_private::defines
    %B::Op_private::labels
    %B::Op_private::ops_using

They contain information about the per-op meanings of the bits in the op_private field. iykyk. ✨

πŸ’– %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{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
                     )],

};

πŸŽ€ %defines πŸŽ€

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

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

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

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

that's the tea, bestie 🫢 this page is from perl v5.42.3, dated 2026-11-03, and it's B::Op_private(3pm) β€” periodt. πŸ’–

πŸ“¦ where this page comes from