---
name: "Object::Role"
section: "3pm"
platform: "linux"
package: "libobject-role-perl"
version: "0.001-1"
release: "Debian 7 (Wheezy)"
platforms: ["linux"]
url: "https://new.carta.tech/Object::Role"
---

# Object::Role(3pm)

base class for non-Moose roles

## NAME

Object::Role - base class for non-Moose roles

## SYNOPSIS

```
 {
   package Object::Dumpable;
   use base qw/Object::Role/;
   use Data::Dumper;
   sub import
   {
     my ($class, @args) = @_;
     my ($caller, %args) = __PACKAGE__->parse_arguments(undef, @args);
     my $coderef = sub
       {
         my ($self) = @_;
         return Dumper($self);
       };
     __PACKAGE__->install_method(dump => $coderef, $caller);
   }
 }

 {
   package Foo;
   use Object::Dumpable;
   sub new { ... }
 }

 {
   package main;
   my $foo = Foo->new;
   warn $foo->dump;
 }
```

## DESCRIPTION

This will be better documented once I fully understand it myself!

The idea of this is to be a base class for roles like Object::DOES, Object::Stash and Object::ID. It handles parsing of import arguments, installing methods into the caller's namespace (like Exporter, but using a technique that is immune to namespace::autoclean) and tracking which packages have consumed your role.

While `"Object::Role"` is a base class for roles, it is not itself a role, so does not export anything. Instead, your role must inherit from it.

### Methods

- "parse\_arguments($default\_arg\_name, @arguments)"

  Will parse:

  ```
    package My::Class;
    use My::Role -foo => 1, -bar => [2,3], 4, 5;
  ```

  as:

  ```
    (
      'My::Class',   # caller,
      (
        '-foo'             => [1],
        '-bar'             => [2, 3],
        $default_arg_name  => [4, 5],
      )
    )
  ```

- "install\_method($subname =\> $coderef, $package)"

  Installs `$coderef` as "$package\\::$subname".

  Automatically calls register\_consumer($package).

- "register\_consumer($package)"

  Records that `$package` has consumed (used) your role.

- "has\_consumer($package)"

  Check if `$package` has consumed (used) your role.

## BUGS

Please report any bugs to http://rt.cpan.org/Dist/Display.html?Queue=Object-Role \<http://rt.cpan.org/Dist/Display.html?Queue=Object-Role\>.

## SEE ALSO

Object::DOES, Object::AUTHORITY.

## AUTHOR

Toby Inkster \<tobyink@cpan.org\>.

## COPYRIGHT AND LICENCE

This software is copyright (c) 2011 by Toby Inkster.

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

## DISCLAIMER OF WARRANTIES

THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
