1MooseX::Declare::ContexUts(e3rpmC)ontributed Perl DocumeMnotoasteiXo:n:Declare::Context(3pm)
2
3
4
6 MooseX::Declare::Context - Per-keyword declaration context
7
9 version 0.43
10
12 This is not a subclass of Devel::Declare::Context::Simple, but it will
13 delegate all default methods and extend it with some attributes and
14 methods of its own.
15
16 A context object will be instantiated for every keyword that is handled
17 by MooseX::Declare. If handlers want to communicate with other handlers
18 (for example handlers that will only be setup inside a namespace block)
19 it must do this via the generated code.
20
21 In addition to all the methods documented here, all methods from
22 Devel::Declare::Context::Simple are available and will be delegated to
23 an internally stored instance of it.
24
26 caller_file
27 A required "Str" containing the file the keyword was encountered in.
28
29 preamble_code_parts
30 An "ArrayRef" of "CodePart"s that will be used as preamble. A preamble
31 in this context means the beginning of the generated code.
32
33 scope_code_parts
34 These parts will come before the actual body and after the
35 "preamble_code_parts". It is an "ArrayRef" of "CodePart"s.
36
37 cleanup_code_parts
38 An "ArrayRef" of "CodePart"s that will not be directly inserted into
39 the code, but instead be installed in a handler that will run at the
40 end of the scope so you can do namespace cleanups and such.
41
42 stack
43 An "ArrayRef" that contains the stack of handlers. A keyword that was
44 only setup inside a scoped block will have the blockhandler be put in
45 the stack.
46
48 add_preamble_code_parts(CodePart @parts)
49 Object->add_preamble_code_parts (CodeRef @parts)
50
51 See "add_cleanup_code_parts".
52
53 add_scope_code_parts(CodePart @parts)
54 Object->add_scope_code_parts (CodeRef @parts)
55
56 See "add_cleanup_code_parts".
57
58 add_cleanup_code_parts(CodePart @parts)
59 Object->add_cleanup_code_parts (CodeRef @parts)
60
61 For these three methods please look at the corresponding *_code_parts
62 attribute in the list above. These methods are merely convenience
63 methods that allow adding entries to the code part containers.
64
65 inject_code_parts_here
66 True Object->inject_code_parts_here (CodePart @parts)
67
68 Will inject the passed "CodePart"s at the current position in the code.
69
70 peek_next_char
71 Str Object->peek_next_char ()
72
73 Will return the next char without stripping it from the stream.
74
75 inject_code_parts
76 Object->inject_code_parts (
77 Bool :$inject_cleanup_code_parts,
78 CodeRef :$missing_block_handler
79 )
80
81 This will inject the code parts from the attributes above at the
82 current position. The preamble and scope code parts will be inserted
83 first. Then then call to the cleanup code will be injected, unless the
84 options contain a key named "inject_cleanup_code_parts" with a false
85 value.
86
87 The "inject_if_block" method will be called if the next char is a "{"
88 indicating a following block.
89
90 If it is not a block, but a semi-colon is found and the options
91 contained a "missing_block_handler" key was passed, it will be called
92 as method on the context object with the code to inject and the options
93 as arguments. All options that are not recognized are passed through to
94 the "missing_block_handler". You are well advised to prefix option
95 names in your extensions.
96
98 BlockCodePart
99 An "ArrayRef" with at least one element that stringifies to either
100 "BEGIN" or "END". The other parts will be stringified and used as the
101 body for the generated block. An example would be this compiletime role
102 composition:
103
104 ['BEGIN', 'with q{ MyRole }']
105
106 CodePart
107 A part of code represented by either a "Str" or a "BlockCodePart".
108
110 • MooseX::Declare
111
112 • Devel::Declare
113
114 • Devel::Declare::Context::Simple
115
117 Florian Ragwitz <rafl@debian.org>
118
120 This software is copyright (c) 2008 by Florian Ragwitz.
121
122 This is free software; you can redistribute it and/or modify it under
123 the same terms as the Perl 5 programming language system itself.
124
125
126
127perl v5.32.1 2021-01-27 MooseX::Declare::Context(3pm)