Commit | Line | Data |
3fea05b9 |
1 | package PPI::Statement::Scheduled; |
2 | |
3 | =pod |
4 | |
5 | =head1 NAME |
6 | |
7 | PPI::Statement::Scheduled - A scheduled code block |
8 | |
9 | =head1 INHERITANCE |
10 | |
11 | PPI::Statement::Scheduled |
12 | isa PPI::Statement::Sub |
13 | isa PPI::Statement |
14 | isa PPI::Node |
15 | isa PPI::Element |
16 | |
17 | =head1 DESCRIPTION |
18 | |
19 | A scheduled code block is one that is intended to be run at a specific |
20 | time during the loading process. |
21 | |
22 | There are five types of scheduled block: |
23 | |
24 | BEGIN { |
25 | # Executes as soon as this block is fully defined |
26 | ... |
27 | } |
28 | |
29 | CHECK { |
30 | # Executes after overall compile-phase in reverse order |
31 | ... |
32 | } |
33 | |
34 | UNITCHECK { |
35 | # Executes after compile-phase of individual module in reverse order |
36 | ... |
37 | } |
38 | |
39 | INIT { |
40 | # Executes just before run-time |
41 | ... |
42 | } |
43 | |
44 | END { |
45 | # Executes as late as possible in reverse order |
46 | ... |
47 | } |
48 | |
49 | Technically these scheduled blocks are actually subroutines, and in fact |
50 | may have 'sub' in front of them. |
51 | |
52 | =head1 METHODS |
53 | |
54 | =cut |
55 | |
56 | use strict; |
57 | use PPI::Statement::Sub (); |
58 | |
59 | use vars qw{$VERSION @ISA}; |
60 | BEGIN { |
61 | $VERSION = '1.206'; |
62 | @ISA = 'PPI::Statement::Sub'; |
63 | } |
64 | |
65 | sub __LEXER__normal { '' } |
66 | |
67 | sub _complete { |
68 | my $child = $_[0]->schild(-1); |
69 | return !! ( |
70 | defined $child |
71 | and |
72 | $child->isa('PPI::Structure::Block') |
73 | and |
74 | $child->complete |
75 | ); |
76 | } |
77 | |
78 | =pod |
79 | |
80 | =head2 type |
81 | |
82 | The C<type> method returns the type of scheduled block, which should always be |
83 | one of C<'BEGIN'>, C<'CHECK'>, C<'UNITCHECK'>, C<'INIT'> or C<'END'>. |
84 | |
85 | =cut |
86 | |
87 | sub type { |
88 | my $self = shift; |
89 | my @children = $self->schildren or return undef; |
90 | $children[0]->content eq 'sub' |
91 | ? $children[1]->content |
92 | : $children[0]->content; |
93 | } |
94 | |
95 | # This is actually the same as Sub->name |
96 | sub name { |
97 | shift->type(@_); |
98 | } |
99 | |
100 | 1; |
101 | |
102 | =pod |
103 | |
104 | =head1 TO DO |
105 | |
106 | - Write unit tests for this package |
107 | |
108 | =head1 SUPPORT |
109 | |
110 | See the L<support section|PPI/SUPPORT> in the main module. |
111 | |
112 | =head1 AUTHOR |
113 | |
114 | Adam Kennedy E<lt>adamk@cpan.orgE<gt> |
115 | |
116 | =head1 COPYRIGHT |
117 | |
118 | Copyright 2001 - 2009 Adam Kennedy. |
119 | |
120 | This program is free software; you can redistribute |
121 | it and/or modify it under the same terms as Perl itself. |
122 | |
123 | The full text of the license can be found in the |
124 | LICENSE file included with this module. |
125 | |
126 | =cut |