---
name: "PPI::Statement::Compound"
section: "3pm"
platform: "linux"
package: "perl-ppi"
version: "1.291-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/PPI::Statement::Compound"
---

# PPI::Statement::Compound(3pm)

Describes all compound statements

## NAME

PPI::Statement::Compound - Describes all compound statements

## SYNOPSIS

```
  # A compound if statement
  if ( foo ) {
      bar();
  } else {
      baz();
  }
  # A compound loop statement
  foreach ( @list ) {
      bar($_);
  }
```

## INHERITANCE

```
  PPI::Statement::Compound
  isa PPI::Statement
      isa PPI::Node
          isa PPI::Element
```

## DESCRIPTION

`"PPI::Statement::Compound"` objects are used to describe all current forms of compound statements, as described in perlsyn.

This covers blocks using `"if"`, `"unless"`, `"for"`, `"foreach"`, `"while"`, and `"continue"`. Please note this does **not** cover "simple" statements with trailing conditions. Please note also that "do" is also not part of a compound statement.

```
  # This is NOT a compound statement
  my $foo = 1 if $condition;
  # This is also not a compound statement
  do { ... } until $condition;
```

## METHODS

`"PPI::Statement::Compound"` has a number of methods in addition to the standard PPI::Statement, PPI::Node and PPI::Element methods.

### type

The `"type"` method returns the syntactic type of the compound statement.

There are four basic compound statement types.

The `'if'` type includes all variations of the if and unless statements, including any `'elsif'` or `'else'` parts of the compound statement.

The `'while'` type describes the standard while and until statements, but again does **not** describes simple statements with a trailing while.

The `'for'` type covers the C-style for loops, regardless of whether they were declared using `'for'` or `'foreach'`.

The `'foreach'` type covers loops that iterate over collections, regardless of whether they were declared using `'for'` or `'foreach'`.

All of the compounds are a variation on one of these four.

Returns the simple string `'if'`, `'for'`, `'foreach'` or `'while'`, or `"undef"` if the type cannot be determined.

## TO DO

\- Write unit tests for this package

## SUPPORT

See the support section in the main module.

## AUTHOR

Adam Kennedy \<adamk@cpan.org\>

## COPYRIGHT

Copyright 2001 - 2011 Adam Kennedy.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

The full text of the license can be found in the LICENSE file included with this module.
