Commit | Line | Data |
77a005ab |
1 | package attrs; |
9426adcd |
2 | use XSLoader (); |
77a005ab |
3 | |
98225a64 |
4 | $VERSION = "1.02"; |
77a005ab |
5 | |
6 | =head1 NAME |
7 | |
a98df962 |
8 | attrs - set/get attributes of a subroutine (deprecated) |
77a005ab |
9 | |
10 | =head1 SYNOPSIS |
11 | |
12 | sub foo { |
13 | use attrs qw(locked method); |
14 | ... |
15 | } |
16 | |
17 | @a = attrs::get(\&foo); |
18 | |
19 | =head1 DESCRIPTION |
20 | |
a98df962 |
21 | NOTE: Use of this pragma is deprecated. Use the syntax |
22 | |
da2094fd |
23 | sub foo : locked method { } |
a98df962 |
24 | |
25 | to declare attributes instead. See also L<attributes>. |
26 | |
27 | This pragma lets you set and get attributes for subroutines. |
77a005ab |
28 | Setting attributes takes place at compile time; trying to set |
29 | invalid attribute names causes a compile-time error. Calling |
a98df962 |
30 | C<attrs::get> on a subroutine reference or name returns its list |
31 | of attribute names. Notice that C<attrs::get> is not exported. |
77a005ab |
32 | Valid attributes are as follows. |
33 | |
bbc7dcd2 |
34 | =over 4 |
77a005ab |
35 | |
36 | =item method |
37 | |
38 | Indicates that the invoking subroutine is a method. |
39 | |
40 | =item locked |
41 | |
42 | Setting this attribute is only meaningful when the subroutine or |
43 | method is to be called by multiple threads. When set on a method |
44 | subroutine (i.e. one marked with the B<method> attribute above), |
45 | perl ensures that any invocation of it implicitly locks its first |
46 | argument before execution. When set on a non-method subroutine, |
47 | perl ensures that a lock is taken on the subroutine itself before |
48 | execution. The semantics of the lock are exactly those of one |
49 | explicitly taken with the C<lock> operator immediately after the |
50 | subroutine is entered. |
51 | |
52 | =back |
53 | |
54 | =cut |
55 | |
9426adcd |
56 | XSLoader::load 'attrs', $VERSION; |
77a005ab |
57 | |
58 | 1; |