---
name: "MooseX::Has::Options"
section: "3pm"
platform: "linux"
package: "libmoosex-has-options-perl"
version: "0.003-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/MooseX::Has::Options"
---

# MooseX::Has::Options(3pm)

Succinct options for Moose

## NAME

MooseX::Has::Options - Succinct options for Moose

## VERSION

version 0.003

## SYNOPSIS

```
    use Moose;
    use MooseX::Has::Options;
    has 'some_attribute' => (
        qw(:ro :required),
        isa => 'Str',
        ...
    );
    has 'another_attribute' => (
        qw(:ro :lazy_build),
        isa => 'Str',
        ...
    );
```

## DESCRIPTION

This module provides a succinct syntax for declaring options for Moose attributes.

## USAGE

### Declaring options

`"MooseX::Has::Params"` works by checking the arguments to `"has"` for strings that look like options, i.e. alphanumeric strings preceded by a colon, and replaces them with a hash whose keys are the names of the options (sans the colon) and the values are `1`'s. Thus,

```
    has 'some_attribute', ':required';
```

becomes:

```
    has 'some_attribute', required => 1;
```

Options must come in the beginning of the argument list. MooseX::Has::Options will stop searching for options after the first alphanumeric string that does not start with a colon.

The default behaviour can be customised per attribute. For example, here is how `"ro"`, `"rw"` and `"bare"` work:

```
    has 'some_attribute', ':ro';
```

becomes:

```
    has 'some_attribute', is => 'ro';
```

See below for details.

### Handlers

`"MooseX::Has::Options"` allows you to expand specific 'shortcut' arguments to arbitrary values via the handler interface. A 'handler' is a module in the MooseX::Has::Options::Handler namespace that provides a `"handler"` function. The handler function should return a hash whose keys are shortcut names, and the values are hashrefs with the values that the respective shortcuts should be expanded to. In order to enable the shortcuts supplied by a given handler you need to add it in the import statement:

```
    use MooseX::Has::Options qw(NativeTypes);
    has 'some_attribute', qw(:ro :hash), default => sub {{ foo => bar }};
```

The following handlers ship with the default distribution:

- •

  MooseX::Has::Options::Handler::Accessors (included by default when you import this module)

- •

  MooseX::Has::Options::Handler::NativeTypes

- •

  MooseX::Has::Options::Handler::NoInit

## IMPLEMENTATION DETAILS

`"MooseX::Has::Options"` hijacks the `"has"` function imported by Moose and replaces it with one that understands the options syntax described above. This is not an optimal solution, but the current implementation of `"Moose::Meta::Attribute"` prevents this functionality from being provided as a meta trait.

## DEPRECATED BEHAVIOUR

Previous versions of `"MooseX::Has::Params"` allowed you to specify during import the name of the function too hook into, like so:

```
    use HTML::FormHandler::Moose;
    use MooseX::Has::Options qw(has_field);
    has_field 'name' => (
        qw(:required),
        type => 'Text',
    );
```

This behaviour is deprecated as of version 0.003 as this syntax is now used for specifying handlers. If you need to hook into a different function see the implementation of `"MooseX::Has::Options::import()"` and `"MooseX::Has::Options::import_into()"`.

## SEE ALSO

- •

  MooseX::Has::Sugar

## AUTHOR

Peter Shangov \<pshangov@yahoo.com\>

## COPYRIGHT AND LICENSE

This software is copyright (c) 2012 by Peter Shangov.

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