---
name: "B::Op_private"
section: "3perl"
platform: "linux"
package: "perl"
version: "5.44.0-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/B::Op_private/3perl"
---

# B::Op\_private(3perl)

OP op\_private flag definitions

## NAME

B::Op\_private - OP op\_private flag definitions

## SYNOPSIS

```
    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:

```
    %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:

```
   $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} };
```
