Yes.
use strict; package LoudDecl; use Attribute::Handlers; use attributes; sub FETCH_CODE_ATTRIBUTES { qw(Loud) } sub Loud :ATTR { print "NOISE!\n"; } sub foo: Loud method { print 1; } print "Attributes: "; print join ', ', attributes::get(\&foo); print "\n"; __END__ NOISE! Attributes: method, Loud
See attributes, section "Package-specific Attribute Handling".
update: if you define multiple attributes, you might want to return the right attributes associated to the sub questioned:
use strict; package LoudDecl; use Attribute::Handlers; use attributes; use Scalar::Util; my %attrs; sub FETCH_CODE_ATTRIBUTES { @{$attrs{Scalar::Util::refaddr($_[1])}}; } sub Loud :ATTR { print "NOISE!\n"; no strict 'refs'; push @{$attrs{Scalar::Util::refaddr($_[2])}}, 'Loud'; } sub Boom :ATTR { print "BOOM!\n"; no strict 'refs'; push @{$attrs{Scalar::Util::refaddr($_[2])}}, 'Boom'; } sub foo: Loud method { print 1; } sub bar : Loud Boom method { print "pling.\n"; } print "Attributes: "; print join ', ', attributes::get(\&bar); print "\n"; __END__ NOISE! NOISE! BOOM! Attributes: method, Loud, Boom
In reply to Re: Support for attributes:get in Attribute::Handlers?
by shmem
in thread Support for attributes:get in Attribute::Handlers?
by Thilosophy
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |