Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
Perl6::Export::Attrs(3User Contributed Perl DocumentatiPerl6::Export::Attrs(3)

NAME
       Perl6::Export::Attrs - The Perl 6 'is export(...)' trait	as a Perl 5
       attribute

VERSION
       This document describes Perl6::Export::Attrs version 0.000006

SYNOPSIS
	   package Some::Module;
	   use Perl6::Export::Attrs;

	   # Export &foo by default, when explicitly requested,
	   # or	when the ':ALL'	export set is requested...

	   sub foo :Export(:DEFAULT) {
	       print "phooo!";
	   }

	   # Export &var by default, when explicitly requested,
	   # or	when the ':bees', ':pubs', or ':ALL' export set	is requested...
	   # the parens	after 'is export' are like the parens of a qw(...)

	   sub bar :Export(:DEFAULT :bees :pubs) {
	       print "baaa!";
	   }

	   # Export &baz when explicitly requested
	   # or	when the ':bees' or ':ALL' export set is requested...

	   sub baz :Export(:bees) {
	       print "baassss!";
	   }

	   # Always export &qux
	   # (no matter	what else is explicitly	or implicitly requested)

	   sub qux :Export(:MANDATORY) {
	       print "quuuuuuuuux!";
	   }

	   # Allow the constant	$PI to be exported when	requested...

	   use Readonly;
	   Readonly our	$PI :Export => 355/113;

	   # Allow the variable	$EPSILON to be always exported...

	   our $EPSILON	:Export( :MANDATORY ) =	0.00001;

	   sub IMPORT {
	       # This subroutine is called when	the module is used (as usual),
	       # but it	is called after	any export requests have been handled.
	   };

DESCRIPTION
       Implements a Perl 5 native version of what the Perl 6 symbol export
       mechanism will look like	(with some unavoidable restrictions).

       It's very straightforward:

       o   If you want a subroutine or package variable	to be capable of being
	   exported (when explicitly requested in the "use" arguments),	you
	   mark	it with	the ":Export" attribute.

       o   If you want a subroutine or package variable	to be automatically
	   exported when the module is used (without specific overriding
	   arguments), you mark	it with	the ":Export(:DEFAULT)"	attribute.

       o   If you want a subroutine or package variable	to be automatically
	   exported when the module is used (even if the user specifies
	   overriding arguments), you mark it with the ":Export(:MANDATORY)"
	   attribute.

       o   If the subroutine or	package	variable should	also be	exported when
	   particular export groups are	requested, you add the names of	those
	   export groups to the	attribute's argument list.

       That's it.

   "IMPORT" blocks
       Perl 6 replaces the "import" subroutine with an "IMPORT"	block. It's
       analogous to a "BEGIN" or "END" block, except that it's executed	every
       time the	corresponding module is	"use"'d.

       The "IMPORT" block is passed the	argument list that was specified on
       the "use" line that loaded the corresponding module, minus the
       arguments that were used	to specify exports.

       Note that, due to limitations in	Perl 5,	the "IMPORT" block provided by
       this module must	be terminated by a semi-colon, unless it is the	last
       statement in the	file.

DIAGNOSTICS
       %s does not export: %s\nuse %s failed
	   You tried to	import the specified subroutine	or package variable,
	   but the module didn't export	it. Often caused by a misspelling, or
	   forgetting to add an	":Export" attribute to the definition of the
	   subroutine or variable in question.

       Bad tagset in :Export attribute at %s line %s: [%s]
	   You tried to	import a collection of items via a tagset, but the
	   module didn't export	any subroutines	under that tagset. Is the
	   tagset name misspelled (maybe you forgot the	colon?).

       Can't export lexical %s variable	at %s
	   The module can only export package variables. You applied the
	   ":Export" marker to a non-package variable (almost certainly	to a
	   lexical). Change the	variable's "my"	declarator to an "our".

       Can't export anonymous subroutine at %s
	   Although you	can apply the ":Export"	marker to an anonymous
	   subroutine, it rarely makes any sense to do so, since that
	   subroutine can't be exported	without	a name to export it as.	Either
	   give	the subroutine a name, or make sure it's aliased to a named
	   typeglob at compile-time (or, at least, before it's exported).

CONFIGURATION AND ENVIRONMENT
       Perl6::Export::Attrs requires no	configuration files or environment
       variables.

DEPENDENCIES
       This module requires the	Attribute::Handlers module to handle the
       attributes.

INCOMPATIBILITIES
       This module cannot be used with the Memoize CPAN	module,	because
       memoization replaces the	original subroutine with a wrapper. Because
       the ":Export" attribute is applied to the original (not the wrapper),
       the memoized wrapper is not found by the	exporter mechanism.

BUGS AND LIMITATIONS
       No bugs have been reported.

       Note that the module does not support exporting lexical variables,
       since there is no way for the exporter mechanism	to determine the name
       of a lexical and	hence to export	it.

       Nor does	this module support the	numerous addition export modes that
       Perl 6 offers, such as export-as-lexical	or export-as-state.

       Please report any bugs or feature requests to
       "bug-perl6-export-attrs@rt.cpan.org", or	through	the web	interface at
       <http://rt.cpan.org>.

AUTHOR
       Damian Conway  "<DCONWAY@cpan.org>"

LICENCE	AND COPYRIGHT
       Copyright (c) 2005, Damian Conway "<DCONWAY@cpan.org>". All rights
       reserved.

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

DISCLAIMER OF WARRANTY
       BECAUSE THIS SOFTWARE IS	LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
       FOR THE SOFTWARE, TO THE	EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT
       WHEN OTHERWISE STATED IN	WRITING	THE COPYRIGHT HOLDERS AND/OR OTHER
       PARTIES PROVIDE THE SOFTWARE "AS	IS" WITHOUT WARRANTY OF	ANY KIND,
       EITHER EXPRESSED	OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
       WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
       ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF	THE SOFTWARE IS	WITH
       YOU. SHOULD THE SOFTWARE	PROVE DEFECTIVE, YOU ASSUME THE	COST OF	ALL
       NECESSARY SERVICING, REPAIR, OR CORRECTION.

       IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR	AGREED TO IN WRITING
       WILL ANY	COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
       REDISTRIBUTE THE	SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE LIABLE
       TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL, OR
       CONSEQUENTIAL DAMAGES ARISING OUT OF THE	USE OR INABILITY TO USE	THE
       SOFTWARE	(INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
       RENDERED	INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
       FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
       SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
       DAMAGES.

perl v5.32.0			  2018-02-17	       Perl6::Export::Attrs(3)

NAME | VERSION | SYNOPSIS | DESCRIPTION | DIAGNOSTICS | CONFIGURATION AND ENVIRONMENT | DEPENDENCIES | INCOMPATIBILITIES | BUGS AND LIMITATIONS | AUTHOR | LICENCE AND COPYRIGHT | DISCLAIMER OF WARRANTY

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=Perl6::Export::Attrs&sektion=3&manpath=FreeBSD+12.2-RELEASE+and+Ports>

home | help