---
name: "authority::shared"
section: "3pm"
platform: "linux"
package: "libauthority-shared-perl"
version: "0.006-1"
release: "Debian 7 (Wheezy)"
platforms: ["linux"]
url: "https://new.carta.tech/authority::shared"
---

# authority::shared(3pm)

a multi-AUTHORITY method for your classes

## NAME

authority::shared - a multi-AUTHORITY method for your classes

## SYNOPSIS

```
 package MyApp;
 BEGIN { $MyApp::AUTHORITY = 'cpan:JOE'; }
 use authority::shared qw(cpan:ALICE cpan:BOB);

 package main;
 use feature qw(say);
 say scalar MyApp->AUTHORITY;     # says "cpan:JOE"
 MyApp->AUTHORITY('cpan:JOE');    # lives
 MyApp->AUTHORITY('cpan:ALICE');  # lives
 MyApp->AUTHORITY('cpan:BOB');    # lives
 MyApp->AUTHORITY('cpan:CAROL');  # croaks
```

## DESCRIPTION

This module allows you to indicate that your module is issued by multiple authorities. The package variable `$AUTHORITY` should still be used to indicate the primary authority for the package.

This module does two simple things:

- 1\. Creates an @AUTHORITIES array in the caller package, populating it with the arguments passed to "authority::shared" on the "use" line.

  - 2\. Exports an AUTHORITY function to your package that reads the $AUTHORITY and @AUTHORITIES package variables.

  The main use case for shared authorities is for team projects. The team would designate a URI to represent the team as a whole. For example,  `"http://datetime.perl.org/"`, `"http://moose.iinteractive.com/"`  or `"http://www.perlrdf.org/"`. Releases can then be officially stamped with the authority of the team using:

```
 use authority::shared q<http://www.perlrdf.org/>;
```

And users can check they have an module released by the official team using:

```
 RDF::TakeOverTheWorld->AUTHORITY(q<http://www.perlrdf.org/>);
```

which will croak if package RDF::TakeOverTheWorld doesn't have the specified authority.

## BUGS

An obvious limitation is that this module relies on honesty. Don't release modules under authorities you have no authority to use.

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

## SEE ALSO

- •

  Object::AUTHORITY - an AUTHORITY method for your class

- •

  *authority::shared* (this module) - a more sophisticated AUTHORITY method for your class

- •

  UNIVERSAL::AUTHORITY - an AUTHORITY method for every class (deprecated)

- •

  UNIVERSAL::AUTHORITY::Lexical - an AUTHORITY method for every class, within a lexical scope

- •

  authority - load modules only if they have a particular authority

Background reading: \<http://feather.perl6.nl/syn/S11.html\>, \<http://www.perlmonks.org/?node\_id=694377\>.

## 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.
