Replacement for attrs.pm that sets
or gets the attributes of subroutines. Attributes are set at compile
time. If an attribute is unrecognized, it will result in a fatal
error. While the error is trappable, it will stop the compilation
within an eval
. You must be careful
about naming your attributes; an attribute that’s all lowercase and
not a built-in attribute will result in a warning (unless you use
warnings “reserved”). An example of attributes
is:
sub foo : method ; use attributes ( ); # Optional, to get subroutine declarations my @attrlist = attributes::get(&foo);
The built-in attributes are:
locked
Setting this attribute is meaningful only when the
subroutine or method will be called by multiple threads. When
set on a method subroutine (i.e., one marked with the method
attribute), Perl ensures that
any invocation of it implicitly locks its first argument before
execution. When set on a non-method subroutine, Perl ensures
that a lock is taken on the subroutine itself before execution.
The semantics of the lock are exactly those of one explicitly
taken with the “lock” operator immediately after the subroutine
is entered.
method
Indicates that the referenced subroutine is a
method. This has a meaning when taken together with the locked
attribute. It also means that a
subroutine so marked will not trigger the “Ambiguous call
resolved as CORE::%s” warning.
lvalue
Indicates that the referenced subroutine is a valid lvalue and can be assigned to. The subroutine must return a modifiable value such as a scalar variable, as described in the perlsub manpage.
There are no built-in attributes for anything other than subroutines.
3.17.154.139