1Meta::Builder(3) User Contributed Perl Documentation Meta::Builder(3)
2
3
4
6 Meta::Builder - Tools for creating Meta objects to track custom
7 metrics.
8
10 Meta programming is becoming more and more popular. The popularity of
11 Meta programming comes from the fact that many problems are made
12 significantly easier. There are a few specialized Meta tools out there,
13 for instance <Class:MOP> which is used by Moose to track class
14 metadata.
15
16 Meta::Builder is designed to be a generic tool for writing Meta
17 objects. Unlike specialized tools, Meta::Builder makes no assumptions
18 about what metrics you will care about. Meta::Builder also makes it
19 simple for others to extend your meta-object based tools by providing
20 hooks for other packages to add metrics to your meta object.
21
22 If a specialized Meta object tool is available to meet your needs
23 please use it. However if you need a simple Meta object to track a
24 couple metrics, use Meta::Builder.
25
26 Meta::Builder is also low-sugar and low-dep. In most cases you will not
27 want a class that needs a meta object to use your meta-object class
28 directly. Rather you will usually want to create a sugar class that
29 exports enhanced API functions that manipulate the meta object.
30
32 My/Meta.pm:
33
34 package My::Meta;
35 use strict;
36 use warnings;
37
38 use Meta::Builder;
39
40 # Name the accessor that will be defined in the class that uses the meta object
41 # It is used to retrieve the classes meta object.
42 accessor "mymeta";
43
44 # Add a metric with two actions
45 metric mymetric => sub { [] },
46 pop => sub {
47 my $self = shift;
48 my ( $data ) = @_;
49 pop @$data;
50 },
51 push => sub {
52 my $self = shift;
53 my ( $data, $metric, $action, @args ) = @_;
54 push @$data => @args;
55 };
56
57 # Add an additional action to the metric
58 action mymetric => ( get_ref => sub { shift });
59
60 # Add some predefined metric types + actions
61 hash_metric 'my_hashmetric';
62 lists_metric 'my_listsmetric';
63
64 My.pm:
65
66 package My;
67 use strict;
68 use warnings;
69
70 use My::Meta;
71
72 My::Meta->new( __PACKAGE__ );
73
74 # My::Meta defines mymeta() as the accessor we use to get our meta object.
75 # this is the ONLY way to get the meta object for this class.
76
77 mymeta()->mymetric_push( "some data" );
78 mymeta()->my_hashmetric_add( key => 'value' );
79 mymeta()->my_listsmetric_push( list => qw/valueA valueB/ );
80
81 # It works fine as an object/class method as well.
82 __PACKAGE__->mymeta->do_thing(...);
83
84 ...;
85
87 When you use Meta::Builder your class is automatically turned into a
88 subclass of Meta::Builder::Base. In addition several "sugar" functions
89 are exported into your namespace. To avoid the "sugar" functions you
90 can simply subclass Meta::Builder::Base directly.
91
93 metric( $name, \&generator, %actions )
94 Wrapper around "caller-"add_metric()>. See Meta::Builder::Base.
95
96 action( $metric, $name, $code )
97 Wrapper around "caller-"add_action()>. See Meta::Builder::Base.
98
99 hash_metric( $name, %additional_actions )
100 Wrapper around "caller-"add_hash_metric()>. See
101 Meta::Builder::Base.
102
103 lists_metric( $name, %additional_actions )
104 Wrapper around "caller-"add_lists_metric()>. See
105 Meta::Builder::Base.
106
107 before( $metric, $action, $code )
108 Wrapper around "caller-"hook_before()>. See Meta::Builder::Base.
109
110 after( $metric, $action, $code )
111 Wrapper around "caller-"hook_after()>. See Meta::Builder::Base.
112
113 accessor( $name )
114 Wrapper around "caller-"set_accessor()>. See Meta::Builder::Base.
115
116 make_immutable()
117 Overrides all functions/methods that alter the meta objects meta-
118 data. This in effect prevents anything from adding new metrics,
119 actions, or hooks without directly editing the metadata.
120
122 Chad Granum exodist7@gmail.com
123
125 Copyright (C) 2010 Chad Granum
126
127 Meta-Builder is free software and is licensed under the same terms as
128 Perl itself.
129
130 Meta-Builder is distributed in the hope that it will be useful, but
131 WITHOUT ANY WARRANTY; without even the implied warranty of
132 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the license
133 for more details.
134
135
136
137perl v5.30.1 2020-01-30 Meta::Builder(3)