---
name: "Class::MakeMethods::Composite"
section: "3pm"
platform: "linux"
package: "libclass-makemethods-perl"
version: "1.01-7"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Class::MakeMethods::Composite"
---

# Class::MakeMethods::Composite(3pm)

Make extensible compound methods

## NAME

Class::MakeMethods::Composite - Make extensible compound methods

## SYNOPSIS

```
  package MyObject;
  use Class::MakeMethods::Composite::Hash (
    new => 'new',
    scalar => [ 'foo', 'bar' ],
    array => 'my_list',
    hash => 'my_index',
  );
```

## DESCRIPTION

This document describes the various subclasses of Class::MakeMethods included under the Composite::\* namespace, and the method types each one provides.

The Composite subclasses provide a parameterized set of method-generation implementations.

Subroutines are generated as closures bound to a hash containing the method name and additional parameters, including the arrays of subroutine references that will provide the method's functionality.

### Calling Conventions

When you `"use"` this package, the method names you provide as arguments cause subroutines to be generated and installed in your module.

See "Calling Conventions" in Class::MakeMethods::Standard for more information.

### Declaration Syntax

To declare methods, pass in pairs of a method-type name followed by one or more method names.

Valid method-type names for this package are listed in "METHOD GENERATOR TYPES".

See "Declaration Syntax" in Class::MakeMethods::Standard and "Parameter Syntax" in Class::MakeMethods::Standard for more information.

### About Composite Methods

The methods generated by Class::MakeMethods::Composite are assembled from groups of "fragment" subroutines, each of which provides some aspect of the method's behavior.

You can add pre- and post- operations to any composite method.

```
  package MyObject;
  use Class::MakeMethods::Composite::Hash (
    new => 'new',
    scalar => [
      'foo' => {
        'pre_rules' => [
          sub {
            # Don't automatically convert list to array-ref
            croak "Too many arguments" if ( scalar @_ > 2 );
          }
        ],
        'post_rules' => [
          sub {
            # Don't let anyone see my credit card number!
            ${(pop)->{result}} =~ s/\d{13,16}/****/g;
          }
        ],
      }
    ],
  );
```

## SEE ALSO

See Class::MakeMethods for general information about this distribution.

For distribution, installation, support, copyright and license  information, see Class::MakeMethods::Docs::ReadMe.
