in reply to Support for attributes:get in Attribute::Handlers?
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
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: Support for attributes:get in Attribute::Handlers?
by Thilosophy (Curate) on Feb 15, 2009 at 22:22 UTC | |
by shmem (Chancellor) on Feb 16, 2009 at 02:34 UTC |