# PDL::Bad
📦 stdpdl
## Synopsis
```none
use PDL;
my $a = pdl [1, 2, 3];
$a->badflag(1);
$a->set(1, $a->badvalue);
print $a->nbad, "\n"; # 1
print $a->ngood, "\n"; # 2
```
## Functions
### Other Functions
#### `setvaltobad`
`setvaltobad($pdl, $val)` — set elements equal to `$val` as bad. Upstream `Bad.pd:625`. Same signature as setbadtoval: `pdl_run_setvaltobad(a, b, value)`. Engine restored 2026-04-19. Honours `PDL_INPLACE` so `$x->inplace->setvaltobad(1)` mutates `$x`.
#### `setbadtoval`
`setbadtoval($pdl, $val)` — replace bad values with `$val`.
#### `badmask`
`badmask($pdl, $replacement)` — replace bad values with `$replacement`.
#### `setbadat`
`setbadat($pdl, @indices)` — set element at given indices to the bad value and enable the badflag.
#### `setinftobad`
`setinftobad($pdl)` — set Inf/-Inf elements to bad value, enable badflag. Returns a new pdl (or modifies inplace if inplace flag set).
#### `setnonfinitetobad`
`setnonfinitetobad($pdl)` — set NaN and Inf/-Inf elements to bad value, enable badflag. Returns a new pdl (or modifies inplace if inplace flag set). Combines setnantobad and setinftobad behavior.
#### `isfinite`
`isfinite($pdl)` — returns a PDL of 1s for finite values, 0s for NaN/Inf/bad. Mirrors `PDL::Bad::isfinite`.