---
name: "Class::MakeMethods::Attribute"
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::Attribute"
---

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

Declare generated subs with attribute syntax

## NAME

Class::MakeMethods::Attribute - Declare generated subs with attribute syntax

## SYNOPSIS

```
  package MyObject;
  use Class::MakeMethods::Attribute 'Standard::Hash';

  sub new    :MakeMethod('new');
  sub foo    :MakeMethod('scalar');
  sub bar    :MakeMethod('scalar', { hashkey => 'bar_data' });
  sub debug  :MakeMethod('Standard::Global:scalar');
```

## DESCRIPTION

This package allows common types of methods to be generated via a subroutine attribute declaration. (Available in Perl 5.6 and later.)

Adding the :**MakeMethod()** attribute to a subroutine declaration causes Class::MakeMethods to create and install a subroutine based on the parameters given to the :MakeMethod attribute.

You can declare a default method-generation class by passing the name of a MakeMethods subclass in the use Class::MakeMethods::Attribute statement. This default method-generation class will also apply as the default to any subclasses declared at compile time. If no default method-generation class is selected, you will need to fully-qualify all method type declarations.

## EXAMPLE

Here's a typical use of Class::MakeMethods::Attribute:

```
  package MyObject;
  use Class::MakeMethods::Attribute 'Standard::Hash';

  sub new    :MakeMethod('new');
  sub foo    :MakeMethod('scalar');
  sub bar    :MakeMethod('scalar', { hashkey => 'bar_data' });
  sub debug  :MakeMethod('Standard::Global:scalar');
  package MySubclass;
  use base 'MyObject';
  sub bazzle :MakeMethod('scalar');
```

This is equivalent to the following explicit Class::MakeMethods invocations:

```
  package MyObject;

  use Class::MakeMethods (
    -MakerClass => 'Standard::Hash',
    new => 'new',
    scalar => 'foo',
    scalar => [ 'ba', { hashkey => 'bar_data' } ],
    'Standard::Global:scalar' => 'debug',
  );

  package MySubclass;
  use base 'MyObject';

  use Class::MakeMethods (
    -MakerClass => 'Standard::Hash',
    scalar => 'bazzle',
  );
```

## DIAGNOSTICS

The following warnings and errors may be produced when using Class::MakeMethods::Attribute to generate methods. (Note that this list does not include run-time messages produced by calling the generated methods, or the standard messages produced by Class::MakeMethods.)

- Can't apply MakeMethod attribute to %s declaration.

  You can not use the `":MakeMethod"` attribute with lexical or anonymous subroutine declarations.

- No method type provided for MakeMethod attribute.

  You called `":MakeMethod()"` without the required method-type argument.

## SEE ALSO

See Attribute::Handlers by Damian Conway.

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