start page | rating of books | rating of authors | reviews | copyrights
8.3. attributes
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.
![Previous](../gifs/txtpreva.gif) | ![Home](../gifs/txthome.gif) | ![Next](../gifs/txtnexta.gif) |
8.2. Attribute::Handlers | ![Book Index](../gifs/index.gif) | 8.4. attrs |
Copyright © 2002 O'Reilly & Associates. All rights reserved.