NAME
Evo::Attr
VERSION
version 0.0219
DESCRIPTION
Provides a nice way to use attributes without limitations.
SYNOPSYS
# Foo.pm
package Foo;
use Evo '-Attr attr_handler; -Export import';
attr_handler(
sub ($pkg, $code, @attrs) {
my @found = grep {/^Foo/} @attrs;
my @remaining = grep { !/^Foo/ } @attrs;
say "found in $pkg ($code): " . join ', ', @found if @found;
@remaining;
}
);
# test.pl
use Evo 'Foo *';
sub foo : Foo {...}
USAGE
Package that provides attribute should call "attr_handler" with a handler as a first argument. That handler should examine attributes, and return unknown for other handlers.
Provider should also import "import" in Evo::Export to be able to export MODIFY_CODE_ATTRIBUTES
into the package, that uses attributes.
This approach allow mix different attributes without patching UNIVERSAL
.
package Bar;
use Evo '-Loaded; -Attr attr_handler; -Export import';
attr_handler(
sub ($pkg, $code, @attrs) {
my @found = grep {/^Bar/} @attrs;
my @remaining = grep { !/^Bar/ } @attrs;
say "found in $pkg ($code): " . join ', ', @found if @found;
@remaining;
}
);
# test2.pl
use Evo 'Foo *; Bar *';
sub multi : Foo : Bar(args) {...}
attr_handler
This method should be called only once. In fact, it adds MODIFY_CODE_ATTRIBUTES
to export list and call internal methods that register handler.
1;
AUTHOR
alexbyk.com
COPYRIGHT AND LICENSE
This software is copyright (c) 2016 by alexbyk.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.