← Index
NYTProf Performance Profile   « block view • line view • sub view »
For xt/tapper-mcp-scheduler-with-db-longrun.t
  Run on Tue May 22 17:18:39 2012
Reported on Tue May 22 17:22:59 2012

Filename/2home/ss5/perl5/perlbrew/perls/perl-5.12.3/lib/site_perl/5.12.3/Class/Accessor/Grouped.pm
StatementsExecuted 346982 statements in 1.56s
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
8538314141.19s1.39sClass::Accessor::Grouped::::get_inheritedClass::Accessor::Grouped::get_inherited
8221120.1ms24.1msClass::Accessor::Grouped::::__ANON__[:810]Class::Accessor::Grouped::__ANON__[:810]
359119.73ms39.8msClass::Accessor::Grouped::::_mk_group_accessorsClass::Accessor::Grouped::_mk_group_accessors
35921132.29ms42.1msClass::Accessor::Grouped::::mk_group_accessorsClass::Accessor::Grouped::mk_group_accessors
822112.25ms26.4msClass::Accessor::Grouped::::make_group_accessorClass::Accessor::Grouped::make_group_accessor
22115151.46ms1.67msClass::Accessor::Grouped::::set_inheritedClass::Accessor::Grouped::set_inherited
179111.16ms1.27msClass::Accessor::Grouped::::__ANON__[:606]Class::Accessor::Grouped::__ANON__[:606]
111667µs1.56msClass::Accessor::Grouped::::BEGIN@529Class::Accessor::Grouped::BEGIN@529
5011367µs451µsClass::Accessor::Grouped::::get_super_pathsClass::Accessor::Grouped::get_super_paths
17911108µs108µsClass::Accessor::Grouped::::CORE:substClass::Accessor::Grouped::CORE:subst (opcode)
11112µs14µsClass::Accessor::Grouped::::BEGIN@2Class::Accessor::Grouped::BEGIN@2
11112µs28µsClass::Accessor::Grouped::::BEGIN@744Class::Accessor::Grouped::BEGIN@744
1118µs22µsClass::Accessor::Grouped::::BEGIN@38Class::Accessor::Grouped::BEGIN@38
1117µs15µsClass::Accessor::Grouped::::BEGIN@250Class::Accessor::Grouped::BEGIN@250
1117µs18µsClass::Accessor::Grouped::::BEGIN@37Class::Accessor::Grouped::BEGIN@37
1117µs16µsClass::Accessor::Grouped::::BEGIN@249Class::Accessor::Grouped::BEGIN@249
1117µs21µsClass::Accessor::Grouped::::BEGIN@766Class::Accessor::Grouped::BEGIN@766
1117µs15µsClass::Accessor::Grouped::::BEGIN@793Class::Accessor::Grouped::BEGIN@793
1117µs14µsClass::Accessor::Grouped::::BEGIN@3Class::Accessor::Grouped::BEGIN@3
1117µs14µsClass::Accessor::Grouped::::BEGIN@765Class::Accessor::Grouped::BEGIN@765
1117µs14µsClass::Accessor::Grouped::::BEGIN@297Class::Accessor::Grouped::BEGIN@297
1114µs4µsClass::Accessor::Grouped::::BEGIN@7Class::Accessor::Grouped::BEGIN@7
1114µs4µsClass::Accessor::Grouped::::BEGIN@5Class::Accessor::Grouped::BEGIN@5
1114µs4µsClass::Accessor::Grouped::::BEGIN@4Class::Accessor::Grouped::BEGIN@4
1114µs4µsClass::Accessor::Grouped::::BEGIN@21Class::Accessor::Grouped::BEGIN@21
1112µs2µsClass::Accessor::Grouped::::CORE:matchClass::Accessor::Grouped::CORE:match (opcode)
0000s0sClass::Accessor::Grouped::::__ANON__[:543]Class::Accessor::Grouped::__ANON__[:543]
0000s0sClass::Accessor::Grouped::::__ANON__[:559]Class::Accessor::Grouped::__ANON__[:559]
0000s0sClass::Accessor::Grouped::::__ANON__[:625]Class::Accessor::Grouped::__ANON__[:625]
0000s0sClass::Accessor::Grouped::::__ANON__[:644]Class::Accessor::Grouped::__ANON__[:644]
0000s0sClass::Accessor::Grouped::::__ANON__[:782]Class::Accessor::Grouped::__ANON__[:782]
0000s0sClass::Accessor::Grouped::::get_component_classClass::Accessor::Grouped::get_component_class
0000s0sClass::Accessor::Grouped::::get_simpleClass::Accessor::Grouped::get_simple
0000s0sClass::Accessor::Grouped::::make_group_ro_accessorClass::Accessor::Grouped::make_group_ro_accessor
0000s0sClass::Accessor::Grouped::::make_group_wo_accessorClass::Accessor::Grouped::make_group_wo_accessor
0000s0sClass::Accessor::Grouped::::mk_group_ro_accessorsClass::Accessor::Grouped::mk_group_ro_accessors
0000s0sClass::Accessor::Grouped::::mk_group_wo_accessorsClass::Accessor::Grouped::mk_group_wo_accessors
0000s0sClass::Accessor::Grouped::::set_component_classClass::Accessor::Grouped::set_component_class
0000s0sClass::Accessor::Grouped::::set_simpleClass::Accessor::Grouped::set_simple
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Class::Accessor::Grouped;
2318µs216µs
# spent 14µs (12+2) within Class::Accessor::Grouped::BEGIN@2 which was called: # once (12µs+2µs) by base::import at line 2
use strict;
# spent 14µs making 1 call to Class::Accessor::Grouped::BEGIN@2 # spent 2µs making 1 call to strict::import
3317µs222µs
# spent 14µs (7+7) within Class::Accessor::Grouped::BEGIN@3 which was called: # once (7µs+7µs) by base::import at line 3
use warnings;
# spent 14µs making 1 call to Class::Accessor::Grouped::BEGIN@3 # spent 7µs making 1 call to warnings::import
4316µs14µs
# spent 4µs within Class::Accessor::Grouped::BEGIN@4 which was called: # once (4µs+0s) by base::import at line 4
use Carp ();
# spent 4µs making 1 call to Class::Accessor::Grouped::BEGIN@4
5335µs14µs
# spent 4µs within Class::Accessor::Grouped::BEGIN@5 which was called: # once (4µs+0s) by base::import at line 5
use Scalar::Util ();
# spent 4µs making 1 call to Class::Accessor::Grouped::BEGIN@5
6
7
# spent 4µs within Class::Accessor::Grouped::BEGIN@7 which was called: # once (4µs+0s) by base::import at line 14
BEGIN {
826µs if ($] < 5.009_005) {
9 require MRO::Compat;
10 }
11 else {
12 require mro;
13 }
14152µs14µs}
# spent 4µs making 1 call to Class::Accessor::Grouped::BEGIN@7
15
1611µsour $VERSION = '0.10006';
1718µs12µs$VERSION = eval $VERSION if $VERSION =~ /_/; # numify for warning-free dev releases
# spent 2µs making 1 call to Class::Accessor::Grouped::CORE:match
18
19# when changing minimum version don't forget to adjust Makefile.PL as well
201100nsour $__minimum_xsa_version;
21163µs14µs
# spent 4µs within Class::Accessor::Grouped::BEGIN@21 which was called: # once (4µs+0s) by base::import at line 21
BEGIN { $__minimum_xsa_version = '1.13' }
# spent 4µs making 1 call to Class::Accessor::Grouped::BEGIN@21
22
231200nsour $USE_XS;
24# the unless defined is here so that we can override the value
25# before require/use, *regardless* of the state of $ENV{CAG_USE_XS}
2611µs$USE_XS = $ENV{CAG_USE_XS}
27 unless defined $USE_XS;
28
29# Yes this method is undocumented
30# Yes it should be a private coderef like all the rest at the end of this file
31# No we can't do that (yet) because the DBIC-CDBI compat layer overrides it
32# %$*@!?&!&#*$!!!
33
# spent 39.8ms (9.73+30.1) within Class::Accessor::Grouped::_mk_group_accessors which was called 359 times, avg 111µs/call: # 359 times (9.73ms+30.1ms) by Class::Accessor::Grouped::mk_group_accessors at line 125, avg 111µs/call
sub _mk_group_accessors {
3414364.40ms my($self, $maker, $group, @fields) = @_;
35359201µs my $class = Scalar::Util::blessed $self || $self;
# spent 201µs making 359 calls to Scalar::Util::blessed, avg 560ns/call
36
37319µs228µs
# spent 18µs (7+10) within Class::Accessor::Grouped::BEGIN@37 which was called: # once (7µs+10µs) by base::import at line 37
no strict 'refs';
# spent 18µs making 1 call to Class::Accessor::Grouped::BEGIN@37 # spent 10µs making 1 call to strict::unimport
383362µs236µs
# spent 22µs (8+14) within Class::Accessor::Grouped::BEGIN@38 which was called: # once (8µs+14µs) by base::import at line 38
no warnings 'redefine';
# spent 22µs making 1 call to Class::Accessor::Grouped::BEGIN@38 # spent 14µs making 1 call to warnings::unimport
39
40 # So we don't have to do lots of lookups inside the loop.
413591.27ms $maker = $self->can($maker) unless ref $maker;
# spent 1.27ms making 359 calls to UNIVERSAL::can, avg 4µs/call
42
43 foreach (@fields) {
4416441.22ms if( $_ eq 'DESTROY' ) {
45 Carp::carp("Having a data accessor named DESTROY in ".
46 "'$class' is unwise.");
47 }
48
49 my ($name, $field) = (ref $_)
50 ? (@$_)
51 : ($_, $_)
52 ;
53
54 my $alias = "_${name}_accessor";
55
56 for my $meth ($name, $alias) {
57
58 # the maker may elect to not return anything, meaning it already
59 # installed the coderef for us (e.g. lack of Sub::Name)
6024667.59ms82226.4ms my $cref = $self->$maker($group, $field, $meth)
# spent 26.4ms making 822 calls to Class::Accessor::Grouped::make_group_accessor, avg 32µs/call
61 or next;
62
63 my $fq_meth = "${class}::${meth}";
64
658222.27ms *$fq_meth = Sub::Name::subname($fq_meth, $cref);
# spent 2.27ms making 822 calls to Sub::Name::subname, avg 3µs/call
66 #unless defined &{$class."\:\:$field"}
67 }
68 }
69};
70
71# coderef is setup at the end for clarity
721200nsmy $gen_accessor;
73
74=head1 NAME
75
76Class::Accessor::Grouped - Lets you build groups of accessors
77
78=head1 SYNOPSIS
79
80 use base 'Class::Accessor::Grouped';
81
82 # make basic accessors for objects
83 __PACKAGE__->mk_group_accessors(simple => qw(id name email));
84
85 # make accessor that works for objects and classes
86 __PACKAGE__->mk_group_accessors(inherited => 'awesome_level');
87
88=head1 DESCRIPTION
89
90This class lets you build groups of accessors that will call different
91getters and setters.
92
93=head1 METHODS
94
95=head2 mk_group_accessors
96
97 __PACKAGE__->mk_group_accessors(simple => 'hair_length', [ hair_color => 'hc' ]);
98
99=over 4
100
101=item Arguments: $group, @fieldspec
102
103Returns: none
104
105=back
106
107Creates a set of accessors in a given group.
108
109$group is the name of the accessor group for the generated accessors; they
110will call get_$group($field) on get and set_$group($field, $value) on set.
111
112If you want to mimic Class::Accessor's mk_accessors $group has to be 'simple'
113to tell Class::Accessor::Grouped to use its own get_simple and set_simple
114methods.
115
116@fieldspec is a list of field/accessor names; if a fieldspec is a scalar
117this is used as both field and accessor name, if a listref it is expected to
118be of the form [ $accessor, $field ].
119
120=cut
121
122
# spent 42.1ms (2.29+39.8) within Class::Accessor::Grouped::mk_group_accessors which was called 359 times, avg 117µs/call: # 250 times (1.00ms+25.1ms) by DBIx::Class::Row::register_column at line 1346 of DBIx/Class/Row.pm, avg 105µs/call # 53 times (929µs+5.86ms) by DBIx::Class::mk_classaccessor at line 82 of DBIx/Class.pm, avg 128µs/call # 38 times (150µs+2.94ms) by DBIx::Class::InflateColumn::inflate_column at line 89 of DBIx/Class/InflateColumn.pm, avg 81µs/call # once (5µs+605µs) by Class::C3::Componentised::ensure_class_loaded at line 68 of DBIx/Class/Storage/DBI.pm # once (5µs+590µs) by Class::C3::Componentised::ensure_class_loaded at line 69 of DBIx/Class/Storage/DBI.pm # once (19µs+556µs) by Class::C3::Componentised::ensure_class_loaded at line 18 of DBIx/Class/ResultSource.pm # once (7µs+523µs) by Class::C3::Componentised::ensure_class_loaded at line 33 of DBIx/Class/Storage/DBI.pm # once (16µs+447µs) by Class::C3::Componentised::ensure_class_loaded at line 22 of DBIx/Class/Storage/DBI.pm # once (18µs+378µs) by Class::C3::Componentised::ensure_class_loaded at line 11 of DBIx/Class/Storage/DBI/Cursor.pm # once (5µs+348µs) by Class::C3::Componentised::ensure_class_loaded at line 44 of DBIx/Class/Storage/DBI.pm # once (19µs+333µs) by base::import at line 21 of DBIx/Class/Storage.pm # once (5µs+284µs) by Class::C3::Componentised::ensure_class_loaded at line 25 of DBIx/Class/ResultSource.pm # once (5µs+271µs) by Class::C3::Componentised::ensure_class_loaded at line 26 of DBIx/Class/Storage/DBI.pm # once (18µs+215µs) by base::import at line 50 of DBIx/Class/SQLMaker.pm # once (14µs+210µs) by Class::C3::Componentised::ensure_class_loaded at line 10 of DBIx/Class/ResultSource/View.pm # once (4µs+207µs) by DBIx::Class::FilterColumn::filter_column at line 27 of DBIx/Class/FilterColumn.pm # once (16µs+195µs) by base::import at line 12 of DBIx/Class/ResultSourceProxy.pm # once (5µs+205µs) by base::import at line 22 of DBIx/Class/Storage.pm # once (14µs+190µs) by parent::import at line 73 of DBIx/Class.pm # once (15µs+183µs) by DBIx::Class::ResultSource::BEGIN@7 at line 17 of DBIx/Class/ResultSourceHandle.pm # once (16µs+157µs) by DBIx::Class::ResultSource::Table::BEGIN@6 at line 29 of DBIx/Class/ResultSet.pm
sub mk_group_accessors {
12310772.28ms my ($self, $group, @fields) = @_;
124
12535939.8ms $self->_mk_group_accessors('make_group_accessor', $group, @fields);
# spent 39.8ms making 359 calls to Class::Accessor::Grouped::_mk_group_accessors, avg 111µs/call
126 return;
127}
128
129=head2 mk_group_ro_accessors
130
131 __PACKAGE__->mk_group_ro_accessors(simple => 'birthdate', [ social_security_number => 'ssn' ]);
132
133=over 4
134
135=item Arguments: $group, @fieldspec
136
137Returns: none
138
139=back
140
141Creates a set of read only accessors in a given group. Identical to
142L</mk_group_accessors> but accessors will throw an error if passed a value
143rather than setting the value.
144
145=cut
146
147sub mk_group_ro_accessors {
148 my($self, $group, @fields) = @_;
149
150 $self->_mk_group_accessors('make_group_ro_accessor', $group, @fields);
151}
152
153=head2 mk_group_wo_accessors
154
155 __PACKAGE__->mk_group_wo_accessors(simple => 'lie', [ subject => 'subj' ]);
156
157=over 4
158
159=item Arguments: $group, @fieldspec
160
161Returns: none
162
163=back
164
165Creates a set of write only accessors in a given group. Identical to
166L</mk_group_accessors> but accessors will throw an error if not passed a
167value rather than getting the value.
168
169=cut
170
171sub mk_group_wo_accessors {
172 my($self, $group, @fields) = @_;
173
174 $self->_mk_group_accessors('make_group_wo_accessor', $group, @fields);
175}
176
177=head2 get_simple
178
179=over 4
180
181=item Arguments: $field
182
183Returns: $value
184
185=back
186
187Simple getter for hash-based objects which returns the value for the field
188name passed as an argument.
189
190=cut
191
192sub get_simple {
193 return $_[0]->{$_[1]};
194}
195
196=head2 set_simple
197
198=over 4
199
200=item Arguments: $field, $new_value
201
202Returns: $new_value
203
204=back
205
206Simple setter for hash-based objects which sets and then returns the value
207for the field name passed as an argument.
208
209=cut
210
211sub set_simple {
212 return $_[0]->{$_[1]} = $_[2];
213}
214
215
216=head2 get_inherited
217
218=over 4
219
220=item Arguments: $field
221
222Returns: $value
223
224=back
225
226Simple getter for Classes and hash-based objects which returns the value for
227the field name passed as an argument. This behaves much like
228L<Class::Data::Accessor> where the field can be set in a base class,
229inherited and changed in subclasses, and inherited and changed for object
230instances.
231
232=cut
233
234
# spent 1.39s (1.19+196ms) within Class::Accessor::Grouped::get_inherited which was called 85383 times, avg 16µs/call: # 35102 times (325ms+64.2ms) by DBIx::Class::AccessorGroup::get_component_class at line 13 of DBIx/Class/AccessorGroup.pm, avg 11µs/call # 13801 times (279ms+33.9ms) by DBIx::Class::Version::Table::result_source_instance or DBIx::Class::Version::TableCompat::result_source_instance or Tapper::Schema::ReportsDB::Result::Contact::result_source_instance or Tapper::Schema::ReportsDB::Result::Notification::result_source_instance or Tapper::Schema::ReportsDB::Result::NotificationEvent::result_source_instance or Tapper::Schema::ReportsDB::Result::Report::result_source_instance or Tapper::Schema::ReportsDB::Result::ReportComment::result_source_instance or Tapper::Schema::ReportsDB::Result::ReportFile::result_source_instance or Tapper::Schema::ReportsDB::Result::ReportSection::result_source_instance or Tapper::Schema::ReportsDB::Result::ReportTopic::result_source_instance or Tapper::Schema::ReportsDB::Result::ReportgroupArbitrary::result_source_instance or Tapper::Schema::ReportsDB::Result::ReportgroupTestrun::result_source_instance or Tapper::Schema::ReportsDB::Result::ReportgroupTestrunStats::result_source_instance or Tapper::Schema::ReportsDB::Result::Suite::result_source_instance or Tapper::Schema::ReportsDB::Result::Tap::result_source_instance or Tapper::Schema::ReportsDB::Result::User::result_source_instance or Tapper::Schema::ReportsDB::Result::View010TestrunOverviewReports::result_source_instance or Tapper::Schema::ReportsDB::Result::View020TestrunOverview::result_source_instance or Tapper::Schema::TestrunDB::Result::Host::result_source_instance or Tapper::Schema::TestrunDB::Result::HostFeature::result_source_instance or Tapper::Schema::TestrunDB::Result::Message::result_source_instance or Tapper::Schema::TestrunDB::Result::PrePrecondition::result_source_instance or Tapper::Schema::TestrunDB::Result::Precondition::result_source_instance or Tapper::Schema::TestrunDB::Result::Preconditiontype::result_source_instance or Tapper::Schema::TestrunDB::Result::Queue::result_source_instance or Tapper::Schema::TestrunDB::Result::QueueHost::result_source_instance or Tapper::Schema::TestrunDB::Result::Scenario::result_source_instance or Tapper::Schema::TestrunDB::Result::ScenarioElement::result_source_instance or Tapper::Schema::TestrunDB::Result::State::result_source_instance or Tapper::Schema::TestrunDB::Result::TestplanInstance::result_source_instance or Tapper::Schema::TestrunDB::Result::Testrun::result_source_instance or Tapper::Schema::TestrunDB::Result::TestrunPrecondition::result_source_instance or Tapper::Schema::TestrunDB::Result::TestrunRequestedFeature::result_source_instance or Tapper::Schema::TestrunDB::Result::TestrunRequestedHost::result_source_instance or Tapper::Schema::TestrunDB::Result::TestrunScheduling::result_source_instance or Tapper::Schema::TestrunDB::Result::Topic::result_source_instance or Tapper::Schema::TestrunDB::Result::User::result_source_instance at line 2 of (eval 300)[Class/Accessor/Grouped.pm:807], avg 23µs/call # 12983 times (104ms+24.4ms) by DBIx::Class::Schema::storage at line 2 of (eval 335)[Class/Accessor/Grouped.pm:807], avg 10µs/call # 7002 times (180ms+26.5ms) by DBIx::Class::Storage::DBI::get_use_dbms_capability at line 1040 of DBIx/Class/Storage/DBI.pm, avg 29µs/call # 6450 times (69.2ms+15.6ms) by DBIx::Class::Schema::source_registrations at line 2 of (eval 333)[Class/Accessor/Grouped.pm:807], avg 13µs/call # 5708 times (210ms+25.9ms) by DBIx::Class::Schema::default_resultset_attributes at line 2 of (eval 338)[Class/Accessor/Grouped.pm:807], avg 41µs/call # 4198 times (21.6ms+4.77ms) by DBIx::Class::Schema::class_mappings at line 2 of (eval 332)[Class/Accessor/Grouped.pm:807], avg 6µs/call # 40 times (720µs+95µs) by DBIx::Class::_skip_namespace_frames at line 2 of (eval 272)[Class/Accessor/Grouped.pm:807], avg 20µs/call # 37 times (2.71ms+414µs) by DBIx::Class::ResultSourceProxy::Table::table_class at line 2 of (eval 298)[Class/Accessor/Grouped.pm:807], avg 84µs/call # 37 times (646µs+114µs) by DBIx::Class::ResultSource::sqlt_deploy_callback at line 2 of (eval 297)[Class/Accessor/Grouped.pm:807], avg 21µs/call # 12 times (163µs+23µs) by DBIx::Class::Schema::storage_type at line 2 of (eval 334)[Class/Accessor/Grouped.pm:807], avg 16µs/call # 5 times (70µs+9µs) by DBIx::Class::Storage::DBI::sql_limit_dialect at line 2 of (eval 1391)[Class/Accessor/Grouped.pm:807], avg 16µs/call # 4 times (191µs+21µs) by DBIx::Class::Schema::exception_action at line 2 of (eval 336)[Class/Accessor/Grouped.pm:807], avg 53µs/call # 4 times (81µs+13µs) by DBIx::Class::Schema::stacktrace at line 2 of (eval 337)[Class/Accessor/Grouped.pm:807], avg 24µs/call
sub get_inherited {
2352867511.31s my $class;
236
23728002.17ms167966150ms if ( defined( $class = Scalar::Util::blessed $_[0] ) ) {
# spent 85.3ms making 85383 calls to Scalar::Util::blessed, avg 999ns/call # spent 64.9ms making 82583 calls to Scalar::Util::reftype, avg 786ns/call
238 if (Scalar::Util::reftype $_[0] eq 'HASH') {
239 return $_[0]->{$_[1]} if exists $_[0]->{$_[1]};
240 }
241 else {
242 Carp::croak('Cannot get inherited value on an object instance that is not hash-based');
243 }
244 }
245 else {
246 $class = $_[0];
247 }
248
249319µs224µs
# spent 16µs (7+8) within Class::Accessor::Grouped::BEGIN@249 which was called: # once (7µs+8µs) by base::import at line 249
no strict 'refs';
# spent 16µs making 1 call to Class::Accessor::Grouped::BEGIN@249 # spent 8µs making 1 call to strict::unimport
2503171µs224µs
# spent 15µs (7+8) within Class::Accessor::Grouped::BEGIN@250 which was called: # once (7µs+8µs) by base::import at line 250
no warnings 'uninitialized';
# spent 15µs making 1 call to Class::Accessor::Grouped::BEGIN@250 # spent 8µs making 1 call to warnings::unimport
251
252 my $cag_slot = '::__cag_'. $_[1];
253 return ${$class.$cag_slot} if defined(${$class.$cag_slot});
254
255 # we need to be smarter about recalculation, as @ISA (thus supers) can very well change in-flight
2561755345.3ms my $cur_gen = mro::get_pkg_gen ($class);
# spent 45.3ms making 17553 calls to mro::get_pkg_gen, avg 3µs/call
2571001.40ms if ( $cur_gen != ${$class.'::__cag_pkg_gen__'} ) {
25850451µs @{$class.'::__cag_supers__'} = $_[0]->get_super_paths;
# spent 451µs making 50 calls to Class::Accessor::Grouped::get_super_paths, avg 9µs/call
259 ${$class.'::__cag_pkg_gen__'} = $cur_gen;
260 }
261
262 for (@{$class.'::__cag_supers__'}) {
26343553204ms return ${$_.$cag_slot} if defined(${$_.$cag_slot});
264 };
265
266 return undef;
267}
268
269=head2 set_inherited
270
271=over 4
272
273=item Arguments: $field, $new_value
274
275Returns: $new_value
276
277=back
278
279Simple setter for Classes and hash-based objects which sets and then returns
280the value for the field name passed as an argument. When called on a hash-based
281object it will set the appropriate hash key value. When called on a class, it
282will set a class level variable.
283
284B<Note:>: This method will die if you try to set an object variable on a non
285hash-based object.
286
287=cut
288
289
# spent 1.67ms (1.46+209µs) within Class::Accessor::Grouped::set_inherited which was called 221 times, avg 8µs/call: # 100 times (625µs+125µs) by DBIx::Class::Schema::source_registrations at line 2 of (eval 333)[Class/Accessor/Grouped.pm:807], avg 7µs/call # 43 times (213µs+31µs) by DBIx::Class::Schema::class_mappings at line 2 of (eval 332)[Class/Accessor/Grouped.pm:807], avg 6µs/call # 37 times (317µs+18µs) by DBIx::Class::Version::Table::result_source_instance or DBIx::Class::Version::TableCompat::result_source_instance or Tapper::Schema::ReportsDB::Result::Contact::result_source_instance or Tapper::Schema::ReportsDB::Result::Notification::result_source_instance or Tapper::Schema::ReportsDB::Result::NotificationEvent::result_source_instance or Tapper::Schema::ReportsDB::Result::Report::result_source_instance or Tapper::Schema::ReportsDB::Result::ReportComment::result_source_instance or Tapper::Schema::ReportsDB::Result::ReportFile::result_source_instance or Tapper::Schema::ReportsDB::Result::ReportSection::result_source_instance or Tapper::Schema::ReportsDB::Result::ReportTopic::result_source_instance or Tapper::Schema::ReportsDB::Result::ReportgroupArbitrary::result_source_instance or Tapper::Schema::ReportsDB::Result::ReportgroupTestrun::result_source_instance or Tapper::Schema::ReportsDB::Result::ReportgroupTestrunStats::result_source_instance or Tapper::Schema::ReportsDB::Result::Suite::result_source_instance or Tapper::Schema::ReportsDB::Result::Tap::result_source_instance or Tapper::Schema::ReportsDB::Result::User::result_source_instance or Tapper::Schema::ReportsDB::Result::View010TestrunOverviewReports::result_source_instance or Tapper::Schema::ReportsDB::Result::View020TestrunOverview::result_source_instance or Tapper::Schema::TestrunDB::Result::Host::result_source_instance or Tapper::Schema::TestrunDB::Result::HostFeature::result_source_instance or Tapper::Schema::TestrunDB::Result::Message::result_source_instance or Tapper::Schema::TestrunDB::Result::PrePrecondition::result_source_instance or Tapper::Schema::TestrunDB::Result::Precondition::result_source_instance or Tapper::Schema::TestrunDB::Result::Preconditiontype::result_source_instance or Tapper::Schema::TestrunDB::Result::Queue::result_source_instance or Tapper::Schema::TestrunDB::Result::QueueHost::result_source_instance or Tapper::Schema::TestrunDB::Result::Scenario::result_source_instance or Tapper::Schema::TestrunDB::Result::ScenarioElement::result_source_instance or Tapper::Schema::TestrunDB::Result::State::result_source_instance or Tapper::Schema::TestrunDB::Result::TestplanInstance::result_source_instance or Tapper::Schema::TestrunDB::Result::Testrun::result_source_instance or Tapper::Schema::TestrunDB::Result::TestrunPrecondition::result_source_instance or Tapper::Schema::TestrunDB::Result::TestrunRequestedFeature::result_source_instance or Tapper::Schema::TestrunDB::Result::TestrunRequestedHost::result_source_instance or Tapper::Schema::TestrunDB::Result::TestrunScheduling::result_source_instance or Tapper::Schema::TestrunDB::Result::Topic::result_source_instance or Tapper::Schema::TestrunDB::Result::User::result_source_instance at line 2 of (eval 300)[Class/Accessor/Grouped.pm:807], avg 9µs/call # 12 times (98µs+14µs) by DBIx::Class::AccessorGroup::set_component_class at line 29 of DBIx/Class/AccessorGroup.pm, avg 9µs/call # 8 times (62µs+3µs) by DBIx::Class::mk_classaccessor at line 83 of DBIx/Class.pm, avg 8µs/call # 6 times (33µs+8µs) by DBIx::Class::Schema::storage at line 2 of (eval 335)[Class/Accessor/Grouped.pm:807], avg 7µs/call # 4 times (31µs+2µs) by DBIx::Class::DynamicDefault::__column_dynamic_default_triggers at line 2 of (eval 1304)[Class/Accessor/Grouped.pm:807], avg 8µs/call # 2 times (20µs+2µs) by DBIx::Class::ResultSourceProxy::Table::table_class at line 2 of (eval 298)[Class/Accessor/Grouped.pm:807], avg 11µs/call # 2 times (15µs+2µs) by DBIx::Class::Schema::Versioned::upgrade_directory at line 2 of (eval 349)[Class/Accessor/Grouped.pm:807], avg 8µs/call # 2 times (10µs+900ns) by DBIx::Class::Schema::Versioned::backup_directory at line 2 of (eval 350)[Class/Accessor/Grouped.pm:807], avg 5µs/call # once (13µs+600ns) by DBIx::Class::_skip_namespace_frames at line 2 of (eval 272)[Class/Accessor/Grouped.pm:807] # once (7µs+500ns) by DBIx::Class::Storage::DBI::set_use_dbms_capability at line 1034 of DBIx/Class/Storage/DBI.pm # once (5µs+400ns) by DBIx::Class::Storage::DBI::sql_limit_dialect at line 2 of (eval 1391)[Class/Accessor/Grouped.pm:807] # once (5µs+400ns) by DBIx::Class::Storage::DBI::sql_name_sep at line 2 of (eval 1393)[Class/Accessor/Grouped.pm:807] # once (5µs+400ns) by DBIx::Class::Storage::DBI::sql_quote_char at line 2 of (eval 1392)[Class/Accessor/Grouped.pm:807]
sub set_inherited {
2903611.97ms302209µs if (defined Scalar::Util::blessed $_[0]) {
# spent 144µs making 221 calls to Scalar::Util::blessed, avg 650ns/call # spent 65µs making 81 calls to Scalar::Util::reftype, avg 807ns/call
291 if (Scalar::Util::reftype $_[0] eq 'HASH') {
292 return $_[0]->{$_[1]} = $_[2];
293 } else {
294 Carp::croak('Cannot set inherited value on an object instance that is not hash-based');
295 };
296 } else {
2973526µs222µs
# spent 14µs (7+7) within Class::Accessor::Grouped::BEGIN@297 which was called: # once (7µs+7µs) by base::import at line 297
no strict 'refs';
# spent 14µs making 1 call to Class::Accessor::Grouped::BEGIN@297 # spent 7µs making 1 call to strict::unimport
298
299 return ${$_[0].'::__cag_'.$_[1]} = $_[2];
300 };
301}
302
303=head2 get_component_class
304
305=over 4
306
307=item Arguments: $field
308
309Returns: $value
310
311=back
312
313Gets the value of the specified component class.
314
315 __PACKAGE__->mk_group_accessors('component_class' => 'result_class');
316
317 $self->result_class->method();
318
319 ## same as
320 $self->get_component_class('result_class')->method();
321
322=cut
323
324sub get_component_class {
325 return $_[0]->get_inherited($_[1]);
326};
327
328=head2 set_component_class
329
330=over 4
331
332=item Arguments: $field, $class
333
334Returns: $new_value
335
336=back
337
338Inherited accessor that automatically loads the specified class before setting
339it. This method will die if the specified class could not be loaded.
340
341 __PACKAGE__->mk_group_accessors('component_class' => 'result_class');
342 __PACKAGE__->result_class('MyClass');
343
344 $self->result_class->method();
345
346=cut
347
348sub set_component_class {
349 if ($_[2]) {
350 local $^W = 0;
351 require Class::Inspector;
352 if (Class::Inspector->installed($_[2]) && !Class::Inspector->loaded($_[2])) {
353 eval "require $_[2]";
354
355 Carp::croak("Could not load $_[1] '$_[2]': ", $@) if $@;
356 };
357 };
358
359 return $_[0]->set_inherited($_[1], $_[2]);
360};
361
362=head1 INTERNAL METHODS
363
364These methods are documented for clarity, but are never meant to be called
365directly, and are not really meant for overriding either.
366
367=head2 get_super_paths
368
369Returns a list of 'parent' or 'super' class names that the current class
370inherited from. This is what drives the traversal done by L</get_inherited>.
371
372=cut
373
374
# spent 451µs (367+84) within Class::Accessor::Grouped::get_super_paths which was called 50 times, avg 9µs/call: # 50 times (367µs+84µs) by Class::Accessor::Grouped::get_inherited at line 258, avg 9µs/call
sub get_super_paths {
37550493µs5084µs return @{mro::get_linear_isa( ref($_[0]) || $_[0] )};
# spent 84µs making 50 calls to mro::get_linear_isa, avg 2µs/call
376};
377
378=head2 make_group_accessor
379
380 __PACKAGE__->make_group_accessor('simple', 'hair_length', 'hair_length');
381 __PACKAGE__->make_group_accessor('simple', 'hc', 'hair_color');
382
383=over 4
384
385=item Arguments: $group, $field, $accessor
386
387Returns: \&accessor_coderef ?
388
389=back
390
391Called by mk_group_accessors for each entry in @fieldspec. Either returns
392a coderef which will be installed at C<&__PACKAGE__::$accessor>, or returns
393C<undef> if it elects to install the coderef on its own.
394
395=cut
396
3978222.06ms82224.1ms
# spent 26.4ms (2.25+24.1) within Class::Accessor::Grouped::make_group_accessor which was called 822 times, avg 32µs/call: # 822 times (2.25ms+24.1ms) by Class::Accessor::Grouped::_mk_group_accessors at line 60, avg 32µs/call
sub make_group_accessor { $gen_accessor->('rw', @_) }
# spent 24.1ms making 822 calls to Class::Accessor::Grouped::__ANON__[Class/Accessor/Grouped.pm:810], avg 29µs/call
398
399=head2 make_group_ro_accessor
400
401 __PACKAGE__->make_group_ro_accessor('simple', 'birthdate', 'birthdate');
402 __PACKAGE__->make_group_ro_accessor('simple', 'ssn', 'social_security_number');
403
404=over 4
405
406=item Arguments: $group, $field, $accessor
407
408Returns: \&accessor_coderef ?
409
410=back
411
412Called by mk_group_ro_accessors for each entry in @fieldspec. Either returns
413a coderef which will be installed at C<&__PACKAGE__::$accessor>, or returns
414C<undef> if it elects to install the coderef on its own.
415
416=cut
417
418sub make_group_ro_accessor { $gen_accessor->('ro', @_) }
419
420=head2 make_group_wo_accessor
421
422 __PACKAGE__->make_group_wo_accessor('simple', 'lie', 'lie');
423 __PACKAGE__->make_group_wo_accessor('simple', 'subj', 'subject');
424
425=over 4
426
427=item Arguments: $group, $field, $accessor
428
429Returns: \&accessor_coderef ?
430
431=back
432
433Called by mk_group_wo_accessors for each entry in @fieldspec. Either returns
434a coderef which will be installed at C<&__PACKAGE__::$accessor>, or returns
435C<undef> if it elects to install the coderef on its own.
436
437=cut
438
439sub make_group_wo_accessor { $gen_accessor->('wo', @_) }
440
441
442=head1 PERFORMANCE
443
444To provide total flexibility L<Class::Accessor::Grouped> calls methods
445internally while performing get/set actions, which makes it noticeably
446slower than similar modules. To compensate, this module will automatically
447use the insanely fast L<Class::XSAccessor> to generate the C<simple>-group
448accessors if this module is available on your system.
449
450=head2 Benchmark
451
452This is the result of a set/get/set loop benchmark on perl 5.12.1 with
453thread support, showcasing most popular accessor builders: L<Moose>, L<Mouse>,
454L<Moo>, L<CAF|Class::Accessor::Fast>, L<CAF_XS|Class::Accessor::Fast::XS>,
455L<XSA|Class::XSAccessor>, and L<CAF_XSA|Class::XSAccessor::Compat>:
456
457 Rate CAG moOse CAF moUse moo HANDMADE CAF_XS moUse_XS moo_XS CAF_XSA XSA CAG_XS
458 CAG 169/s -- -21% -24% -32% -32% -34% -59% -63% -67% -67% -67% -67%
459 moOse 215/s 27% -- -3% -13% -13% -15% -48% -53% -58% -58% -58% -58%
460 CAF 222/s 31% 3% -- -10% -10% -13% -46% -52% -57% -57% -57% -57%
461 moUse 248/s 46% 15% 11% -- -0% -3% -40% -46% -52% -52% -52% -52%
462 moo 248/s 46% 15% 11% 0% -- -3% -40% -46% -52% -52% -52% -52%
463 HANDMADE 255/s 50% 18% 14% 3% 3% -- -38% -45% -50% -51% -51% -51%
464 CAF_XS 411/s 143% 91% 85% 66% 66% 61% -- -11% -20% -20% -21% -21%
465 moUse_XS 461/s 172% 114% 107% 86% 86% 81% 12% -- -10% -11% -11% -11%
466 moo_XS 514/s 204% 139% 131% 107% 107% 102% 25% 12% -- -0% -1% -1%
467 CAF_XSA 516/s 205% 140% 132% 108% 108% 103% 26% 12% 0% -- -0% -0%
468 XSA 519/s 206% 141% 133% 109% 109% 104% 26% 13% 1% 0% -- -0%
469 CAG_XS 519/s 206% 141% 133% 109% 109% 104% 26% 13% 1% 0% 0% --
470
471Benchmark program is available in the root of the
472L<repository|http://search.cpan.org/dist/Class-Accessor-Grouped/>:
473
474=head2 Notes on Class::XSAccessor
475
476You can force (or disable) the use of L<Class::XSAccessor> before creating a
477particular C<simple> accessor by either manipulating the global variable
478C<$Class::Accessor::Grouped::USE_XS> to true or false (preferably with
479L<localization|perlfunc/local>, or you can do so before runtime via the
480C<CAG_USE_XS> environment variable.
481
482Since L<Class::XSAccessor> has no knowledge of L</get_simple> and
483L</set_simple> this module does its best to detect if you are overriding
484one of these methods and will fall back to using the perl version of the
485accessor in order to maintain consistency. However be aware that if you
486enable use of C<Class::XSAccessor> (automatically or explicitly), create
487an object, invoke a simple accessor on that object, and B<then> manipulate
488the symbol table to install a C<get/set_simple> override - you get to keep
489all the pieces.
490
491=head1 AUTHORS
492
493Matt S. Trout <mst@shadowcatsystems.co.uk>
494
495Christopher H. Laco <claco@chrislaco.com>
496
497=head1 CONTRIBUTORS
498
499Caelum: Rafael Kitover <rkitover@cpan.org>
500
501frew: Arthur Axel "fREW" Schmidt <frioux@gmail.com>
502
503groditi: Guillermo Roditi <groditi@cpan.org>
504
505Jason Plum <jason.plum@bmmsi.com>
506
507ribasushi: Peter Rabbitson <ribasushi@cpan.org>
508
509
510=head1 COPYRIGHT & LICENSE
511
512Copyright (c) 2006-2010 Matt S. Trout <mst@shadowcatsystems.co.uk>
513
514This program is free software; you can redistribute it and/or modify
515it under the same terms as perl itself.
516
517=cut
518
519########################################################################
520########################################################################
521########################################################################
522#
523# Here be many angry dragons
524# (all code is in private coderefs since everything inherits CAG)
525#
526########################################################################
527########################################################################
528
529
# spent 1.56ms (667µs+891µs) within Class::Accessor::Grouped::BEGIN@529 which was called: # once (667µs+891µs) by base::import at line 583
BEGIN {
530
5311020µs die "Huh?! No minimum C::XSA version?!\n"
532 unless $__minimum_xsa_version;
533
534 local $@;
535 my $err;
536
537
53822µs $err = eval { require Sub::Name; 1; } ? undef : do {
539 delete $INC{'Sub/Name.pm'}; # because older perls suck
540 $@;
541 };
542 *__CAG_ENV__::NO_SUBNAME = $err
543 ? sub () { $err }
544 : sub () { 0 }
545 ;
546
547
548 $err = eval {
549 require Class::XSAccessor;
55018µs Class::XSAccessor->VERSION($__minimum_xsa_version);
# spent 8µs making 1 call to UNIVERSAL::VERSION
551 require Sub::Name;
552 1;
553490µs } ? undef : do {
554 delete $INC{'Sub/Name.pm'}; # because older perls suck
555 delete $INC{'Class/XSAccessor.pm'};
556 $@;
557 };
558 *__CAG_ENV__::NO_CXSA = $err
559 ? sub () { $err }
560 : sub () { 0 }
561 ;
562
563
564 *__CAG_ENV__::BROKEN_GOTO = ($] < '5.008009')
565 ? sub () { 1 }
566 : sub () { 0 }
567 ;
568
569
570 *__CAG_ENV__::UNSTABLE_DOLLARAT = ($] < '5.013002')
571 ? sub () { 1 }
572 : sub () { 0 }
573 ;
574
575
576 *__CAG_ENV__::TRACK_UNDEFER_FAIL = (
577 $INC{'Test/Builder.pm'} || $INC{'Test/Builder2.pm'}
578 and
579 $0 =~ m|^ x?t / .+ \.t $|x
580 ) ? sub () { 1 }
581 : sub () { 0 }
582 ;
5831523µs11.56ms}
# spent 1.56ms making 1 call to Class::Accessor::Grouped::BEGIN@529
584
585# Autodetect unless flag supplied
5861200nsmy $xsa_autodetected;
58731µsif (! defined $USE_XS) {
588 $USE_XS = __CAG_ENV__::NO_CXSA ? 0 : 1;
589 $xsa_autodetected++;
590}
591
592my $maker_templates = {
593 rw => {
594 xs_call => 'accessors',
595
# spent 1.27ms (1.16+108µs) within Class::Accessor::Grouped::__ANON__[/2home/ss5/perl5/perlbrew/perls/perl-5.12.3/lib/site_perl/5.12.3/Class/Accessor/Grouped.pm:606] which was called 179 times, avg 7µs/call: # 179 times (1.16ms+108µs) by Class::Accessor::Grouped::__ANON__[/2home/ss5/perl5/perlbrew/perls/perl-5.12.3/lib/site_perl/5.12.3/Class/Accessor/Grouped.pm:810] at line 803, avg 7µs/call
pp_code => sub {
5968951.48ms my $set = "set_$_[0]";
597 my $get = "get_$_[0]";
598 my $field = $_[1];
599179108µs $field =~ s/'/\\'/g;
# spent 108µs making 179 calls to Class::Accessor::Grouped::CORE:subst, avg 605ns/call
600
601 "
602 \@_ != 1
603 ? shift->$set('$field', \@_)
604 : shift->$get('$field')
605 "
606 },
607 },
608 ro => {
609 xs_call => 'getters',
610 pp_code => sub {
611 my $get = "get_$_[0]";
612 my $field = $_[1];
613 $field =~ s/'/\\'/g;
614
615 "
616 \@_ == 1
617 ? shift->$get('$field')
618 : do {
619 my \$caller = caller;
620 my \$class = ref \$_[0] || \$_[0];
621 Carp::croak(\"'\$caller' cannot alter the value of '$field' \".
622 \"(read-only attributes of class '\$class')\");
623 }
624 "
625 },
626 },
627 wo => {
628 xs_call => 'setters',
629 pp_code => sub {
630 my $set = "set_$_[0]";
631 my $field = $_[1];
632 $field =~ s/'/\\'/g;
633
634 "
635 \@_ != 1
636 ? shift->$set('$field', \@_)
637 : do {
638 my \$caller = caller;
639 my \$class = ref \$_[0] || \$_[0];
640 Carp::croak(\"'\$caller' cannot access the value of '$field' \".
641 \"(write-only attributes of class '\$class')\");
642 }
643 "
644 },
645 },
646110µs};
647
648
6491400nsmy ($accessor_maker_cache, $no_xsa_warned_classes);
650
651# can't use pkg_gen to track this stuff, as it doesn't
652# detect superclass mucking
653110µs12µsmy $original_simple_getter = __PACKAGE__->can ('get_simple');
# spent 2µs making 1 call to UNIVERSAL::can
65414µs11µsmy $original_simple_setter = __PACKAGE__->can ('set_simple');
# spent 1µs making 1 call to UNIVERSAL::can
655
656# Note!!! Unusual signature
657
# spent 24.1ms (20.1+4.05) within Class::Accessor::Grouped::__ANON__[/2home/ss5/perl5/perlbrew/perls/perl-5.12.3/lib/site_perl/5.12.3/Class/Accessor/Grouped.pm:810] which was called 822 times, avg 29µs/call: # 822 times (20.1ms+4.05ms) by Class::Accessor::Grouped::make_group_accessor at line 397, avg 29µs/call
$gen_accessor = sub {
65824664.66ms my ($type, $class, $group, $field, $methname) = @_;
659822402µs if (my $c = Scalar::Util::blessed( $class )) {
# spent 402µs making 822 calls to Scalar::Util::blessed, avg 488ns/call
660 $class = $c;
661 }
662
663 # When installing an XSA simple accessor, we need to make sure we are not
664 # short-circuiting a (compile or runtime) get_simple/set_simple override.
665 # What we do here is install a lazy first-access check, which will decide
666 # the ultimate coderef being placed in the accessor slot
667 #
668 # Also note that the *original* class will always retain this shim, as
669 # different branches inheriting from it may have different overrides.
670 # Thus the final method (properly labeled and all) is installed in the
671 # calling-package's namespace
67212142.70ms if ($USE_XS and $group eq 'simple') {
673 die sprintf( "Class::XSAccessor requested but not available:\n%s\n", __CAG_ENV__::NO_CXSA )
674 if __CAG_ENV__::NO_CXSA;
675
676 my ($expected_cref, $cached_implementation);
677 my $ret = $expected_cref = sub {
6783621.18ms7860µs my $current_class = Scalar::Util::blessed( $_[0] ) || $_[0];
# spent 60µs making 78 calls to Scalar::Util::blessed, avg 773ns/call
679
680 # $cached_implementation will be set only if the shim got
681 # 'around'ed, in which case it is handy to avoid re-running
682 # this block over and over again
68336453µs my $resolved_implementation = $cached_implementation->{$current_class} || do {
68472397µs72202µs if (
# spent 202µs making 72 calls to UNIVERSAL::can, avg 3µs/call
685 ($current_class->can('get_simple')||0) == $original_simple_getter
686 &&
687 ($current_class->can('set_simple')||0) == $original_simple_setter
688 ) {
689 # nothing has changed, might as well use the XS crefs
690 #
691 # note that by the time this code executes, we already have
692 # *objects* (since XSA works on 'simple' only by definition).
693 # If someone is mucking with the symbol table *after* there
694 # are some objects already - look! many, shiny pieces! :)
695 #
696 # The weird breeder thingy is because XSA does not have an
697 # interface returning *just* a coderef, without installing it
698 # anywhere :(
699363.36ms Class::XSAccessor->import(
# spent 3.36ms making 36 calls to Class::XSAccessor::import, avg 93µs/call
700 replace => 1,
701 class => '__CAG__XSA__BREEDER__',
702 $maker_templates->{$type}{xs_call} => {
703 $methname => $field,
704 },
705 );
7063647µs __CAG__XSA__BREEDER__->can($methname);
# spent 47µs making 36 calls to UNIVERSAL::can, avg 1µs/call
707 }
708 else {
709 if (! $xsa_autodetected and ! $no_xsa_warned_classes->{$current_class}++) {
710 # not using Carp since the line where this happens doesn't mean much
711 warn 'Explicitly requested use of Class::XSAccessor disabled for objects of class '
712 . "'$current_class' inheriting from '$class' due to an overriden get_simple and/or "
713 . "set_simple\n";
714 }
715
716 do {
717 # that's faster than local
718 $USE_XS = 0;
719 my $c = $gen_accessor->($type, $class, 'simple', $field, $methname);
720 $USE_XS = 1;
721 $c;
722 };
723 }
724 };
725
726 # if after this shim was created someone wrapped it with an 'around',
727 # we can not blindly reinstall the method slot - we will destroy the
728 # wrapper. Silently chain execution further...
729138293µs78116µs if ( !$expected_cref or $expected_cref != ($current_class->can($methname)||0) ) {
# spent 116µs making 78 calls to UNIVERSAL::can, avg 1µs/call
730
731 # there is no point in re-determining it on every subsequent call,
732 # just store for future reference
733 $cached_implementation->{$current_class} ||= $resolved_implementation;
734
735 # older perls segfault if the cref behind the goto throws
736 # http://rt.perl.org/rt3/Public/Bug/Display.html?id=35878
737 return $resolved_implementation->(@_) if __CAG_ENV__::BROKEN_GOTO;
738
7394620µs goto $resolved_implementation;
# spent 11µs making 32 calls to __CAG__XSA__BREEDER__::_columns, avg 359ns/call # spent 4µs making 6 calls to __CAG__XSA__BREEDER__::source_name, avg 583ns/call # spent 3µs making 4 calls to __CAG__XSA__BREEDER__::name, avg 675ns/call # spent 2µs making 4 calls to __CAG__XSA__BREEDER__::_ordered_columns, avg 550ns/call
740 }
741
742 if (__CAG_ENV__::TRACK_UNDEFER_FAIL) {
743 my $deferred_calls_seen = do {
744388µs244µs
# spent 28µs (12+16) within Class::Accessor::Grouped::BEGIN@744 which was called: # once (12µs+16µs) by base::import at line 744
no strict 'refs';
# spent 28µs making 1 call to Class::Accessor::Grouped::BEGIN@744 # spent 16µs making 1 call to strict::unimport
745 \%{"${current_class}::__cag_deferred_xs_shim_invocations"}
746 };
747 my @cframe = caller(0);
748 if (my $already_seen = $deferred_calls_seen->{$cframe[3]}) {
749 Carp::carp (
750 "Deferred version of method $cframe[3] invoked more than once (originally "
751 . "invoked at $already_seen). This is a strong indication your code has "
752 . 'cached the original ->can derived method coderef, and is using it instead '
753 . 'of the proper method re-lookup, causing performance regressions'
754 );
755 }
756 else {
757 $deferred_calls_seen->{$cframe[3]} = "$cframe[1] line $cframe[2]";
758 }
759 }
760
761 # install the resolved implementation into the code slot so we do not
762 # come here anymore (hopefully)
763 # since XSAccessor was available - so is Sub::Name
764 {
765319µs222µs
# spent 14µs (7+8) within Class::Accessor::Grouped::BEGIN@765 which was called: # once (7µs+8µs) by base::import at line 765
no strict 'refs';
# spent 14µs making 1 call to Class::Accessor::Grouped::BEGIN@765 # spent 8µs making 1 call to strict::unimport
7663113µs235µs
# spent 21µs (7+14) within Class::Accessor::Grouped::BEGIN@766 which was called: # once (7µs+14µs) by base::import at line 766
no warnings 'redefine';
# spent 21µs making 1 call to Class::Accessor::Grouped::BEGIN@766 # spent 14µs making 1 call to warnings::unimport
767
768128570µs my $fq_name = "${current_class}::${methname}";
76932113µs *$fq_name = Sub::Name::subname($fq_name, $resolved_implementation);
# spent 113µs making 32 calls to Sub::Name::subname, avg 4µs/call
770
771 # need to update what the shim expects too *in case* its
772 # ->can was cached for some moronic reason
773 $expected_cref = $resolved_implementation;
7743248µs Scalar::Util::weaken($expected_cref);
# spent 48µs making 32 calls to Scalar::Util::weaken, avg 2µs/call
775 }
776
777 # older perls segfault if the cref behind the goto throws
778 # http://rt.perl.org/rt3/Public/Bug/Display.html?id=35878
779 return $resolved_implementation->(@_) if __CAG_ENV__::BROKEN_GOTO;
780
7813217µs goto $resolved_implementation;
# spent 2µs making 1 call to DBIx::Class::ResultSet::result_source # spent 700ns making 1 call to DBIx::Class::ResultSource::Table::name # spent 600ns making 1 call to DBIx::Class::ResultSource::Table::_primaries # spent 600ns making 1 call to DBIx::Class::Storage::DBI::schema # spent 500ns making 1 call to DBIx::Class::ResultSet::_result_class # spent 500ns making 1 call to DBIx::Class::ResultSource::Table::_columns # spent 500ns making 1 call to DBIx::Class::ResultSource::Table::_ordered_columns # spent 500ns making 1 call to DBIx::Class::ResultSource::Table::source_name # spent 500ns making 1 call to DBIx::Class::ResultSource::View::view_definition # spent 500ns making 1 call to DBIx::Class::SQLMaker::SQLite::limit_dialect # spent 500ns making 1 call to DBIx::Class::Storage::DBI::Cursor::sth # spent 500ns making 1 call to DBIx::Class::Storage::DBI::SQLite::_conn_pid # spent 500ns making 1 call to DBIx::Class::Storage::DBI::SQLite::_dbh_autocommit # spent 500ns making 1 call to DBIx::Class::Storage::DBI::SQLite::debug # spent 500ns making 1 call to DBIx::Class::Storage::DBI::SQLite::disable_sth_caching # spent 500ns making 1 call to DBIx::Class::Storage::DBI::SQLite::on_connect_do # spent 500ns making 1 call to DBIx::Class::Storage::DBI::SQLite::transaction_depth # spent 500ns making 1 call to DBIx::Class::Storage::DBI::SQLite::unsafe # spent 500ns making 1 call to DBIx::Class::Storage::DBI::_connect_info # spent 500ns making 1 call to DBIx::Class::Storage::DBI::_dbh # spent 500ns making 1 call to DBIx::Class::Storage::DBI::_dbh_details # spent 500ns making 1 call to DBIx::Class::Storage::DBI::_dbi_connect_info # spent 500ns making 1 call to DBIx::Class::Storage::DBI::_dbic_connect_attributes # spent 500ns making 1 call to DBIx::Class::Storage::DBI::_driver_determined # spent 500ns making 1 call to DBIx::Class::Storage::DBI::_sql_maker_opts # spent 400ns making 1 call to DBIx::Class::ResultSource::Table::_relationships # spent 400ns making 1 call to DBIx::Class::ResultSource::Table::_unique_constraints # spent 400ns making 1 call to DBIx::Class::ResultSource::Table::resultset_attributes # spent 400ns making 1 call to DBIx::Class::ResultSource::View::is_virtual # spent 400ns making 1 call to DBIx::Class::Storage::DBI::SQLite::on_connect_call # spent 400ns making 1 call to DBIx::Class::Storage::DBI::_sql_maker # spent 300ns making 1 call to DBIx::Class::SQLMaker::SQLite::name_sep
782 };
783
7849893µs Scalar::Util::weaken($expected_cref); # to break the self-reference
# spent 93µs making 98 calls to Scalar::Util::weaken, avg 952ns/call
785 $ret;
786 }
787
788 # no Sub::Name - just install the coderefs directly (compiling every time)
789 elsif (__CAG_ENV__::NO_SUBNAME) {
790 my $src = $accessor_maker_cache->{source}{$type}{$group}{$field} ||=
791 $maker_templates->{$type}{pp_code}->($group, $field);
792
7933122µs223µs
# spent 15µs (7+8) within Class::Accessor::Grouped::BEGIN@793 which was called: # once (7µs+8µs) by base::import at line 793
no warnings 'redefine';
# spent 15µs making 1 call to Class::Accessor::Grouped::BEGIN@793 # spent 8µs making 1 call to warnings::unimport
794 local $@ if __CAG_ENV__::UNSTABLE_DOLLARAT;
795 eval "sub ${class}::${methname} { $src }";
796
797 undef; # so that no further attempt will be made to install anything
798 }
799
800 # a coderef generator with a variable pad (returns a fresh cref on every invocation)
801 else {
80253711.9ms7242.28ms ($accessor_maker_cache->{pp}{$type}{$group}{$field} ||= do {
# spent 264µs making 74 calls to Class::Accessor::Grouped::__ANON__[(eval 300)[Class/Accessor/Grouped.pm:807]:5], avg 4µs/call # spent 192µs making 52 calls to Class::Accessor::Grouped::__ANON__[(eval 301)[Class/Accessor/Grouped.pm:807]:5], avg 4µs/call # spent 114µs making 20 calls to Class::Accessor::Grouped::__ANON__[(eval 358)[Class/Accessor/Grouped.pm:807]:5], avg 6µs/call # spent 110µs making 32 calls to Class::Accessor::Grouped::__ANON__[(eval 309)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 96µs making 28 calls to Class::Accessor::Grouped::__ANON__[(eval 367)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 92µs making 30 calls to Class::Accessor::Grouped::__ANON__[(eval 310)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 89µs making 28 calls to Class::Accessor::Grouped::__ANON__[(eval 366)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 68µs making 18 calls to Class::Accessor::Grouped::__ANON__[(eval 302)[Class/Accessor/Grouped.pm:807]:5], avg 4µs/call # spent 53µs making 14 calls to Class::Accessor::Grouped::__ANON__[(eval 1305)[Class/Accessor/Grouped.pm:807]:5], avg 4µs/call # spent 33µs making 8 calls to Class::Accessor::Grouped::__ANON__[(eval 304)[Class/Accessor/Grouped.pm:807]:5], avg 4µs/call # spent 29µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 1376)[Class/Accessor/Grouped.pm:807]:5], avg 7µs/call # spent 27µs making 6 calls to Class::Accessor::Grouped::__ANON__[(eval 1297)[Class/Accessor/Grouped.pm:807]:5], avg 4µs/call # spent 25µs making 8 calls to Class::Accessor::Grouped::__ANON__[(eval 374)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 25µs making 8 calls to Class::Accessor::Grouped::__ANON__[(eval 357)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 23µs making 8 calls to Class::Accessor::Grouped::__ANON__[(eval 394)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 20µs making 6 calls to Class::Accessor::Grouped::__ANON__[(eval 397)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 16µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 353)[Class/Accessor/Grouped.pm:807]:5], avg 4µs/call # spent 16µs making 6 calls to Class::Accessor::Grouped::__ANON__[(eval 1298)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 15µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 359)[Class/Accessor/Grouped.pm:807]:5], avg 4µs/call # spent 15µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 303)[Class/Accessor/Grouped.pm:807]:5], avg 4µs/call # spent 15µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 364)[Class/Accessor/Grouped.pm:807]:5], avg 4µs/call # spent 14µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 1373)[Class/Accessor/Grouped.pm:807]:5], avg 4µs/call # spent 14µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 1324)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 14µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 1370)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 14µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 383)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 14µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 1311)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 13µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 391)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 12µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 1368)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 12µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 1314)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 12µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 1312)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 12µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 386)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 11µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 1365)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 11µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 1366)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 11µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 360)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 11µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 385)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 11µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 392)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 11µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 1315)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 11µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 1375)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 11µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 365)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 11µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 1371)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 11µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 1374)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 11µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 1316)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 11µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 1372)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 11µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 1369)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 10µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 384)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 10µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 1328)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 10µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1340)[Class/Accessor/Grouped.pm:807]:5], avg 5µs/call # spent 10µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 1357)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 10µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 1385)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 9µs making 4 calls to Class::Accessor::Grouped::__ANON__[(eval 1341)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 8µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1394)[Class/Accessor/Grouped.pm:807]:5], avg 4µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 272)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 295)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1310)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 356)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1404)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1307)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 334)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 354)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1363)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1318)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1390)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1391)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1392)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1400)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 348)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1336)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1342)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1348)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1364)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 332)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 336)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 297)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1304)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1332)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1335)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1355)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1360)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1367)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1397)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1402)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 6µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 373)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1344)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1356)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 338)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1352)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 287)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1326)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1378)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 298)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 344)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1306)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1358)[Class/Accessor/Grouped.pm:807]:5], avg 3µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 345)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 396)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1393)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1395)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 362)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 375)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1317)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1384)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1398)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1403)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1405)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 299)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 349)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 355)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 368)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 370)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 371)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 379)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 380)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1299)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1320)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1321)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1322)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1325)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1327)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1329)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1330)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1331)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1333)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1345)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1354)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1359)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1383)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1396)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 363)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 369)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 382)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 393)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 395)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1337)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1339)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1362)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1377)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1379)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 333)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 337)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1399)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 296)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 347)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1308)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1309)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1319)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1323)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1334)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1343)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1346)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1349)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1350)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1353)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1381)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1401)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 307)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 308)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 335)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 376)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 387)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 389)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1338)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 5µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1380)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 4µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1351)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 4µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 305)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 4µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 306)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 4µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 351)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 4µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 1347)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 4µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 352)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 4µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 378)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 4µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 388)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 4µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 398)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call # spent 4µs making 2 calls to Class::Accessor::Grouped::__ANON__[(eval 381)[Class/Accessor/Grouped.pm:807]:5], avg 2µs/call
8031791.27ms my $src = $accessor_maker_cache->{source}{$type}{$group}{$field} ||=
# spent 1.27ms making 179 calls to Class::Accessor::Grouped::__ANON__[Class/Accessor/Grouped.pm:606], avg 7µs/call
804 $maker_templates->{$type}{pp_code}->($group, $field);
805
806 local $@ if __CAG_ENV__::UNSTABLE_DOLLARAT;
807 eval "sub { my \$dummy; sub { \$dummy if 0; $src } }" or die $@;
# spent 105ms executing statements in string eval
# includes 264µs spent executing 74 calls to 1 sub defined therein. # spent 90.8ms executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 69.6ms executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 65.3ms executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 42.1ms executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 40.4ms executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 32.3ms executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 26.5ms executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 20.7ms executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 16.7ms executing statements in string eval
# includes 192µs spent executing 52 calls to 1 sub defined therein. # spent 9.89ms executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 9.12ms executing statements in string eval
# includes 114µs spent executing 20 calls to 1 sub defined therein. # spent 6.88ms executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 4.86ms executing statements in string eval
# includes 4µs spent executing 2 calls to 1 sub defined therein. # spent 3.41ms executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 2.61ms executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 2.57ms executing statements in string eval
# includes 15µs spent executing 4 calls to 1 sub defined therein. # spent 1.83ms executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 1.70ms executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 1.56ms executing statements in string eval
# includes 33µs spent executing 8 calls to 1 sub defined therein. # spent 1.27ms executing statements in string eval
# includes 4µs spent executing 2 calls to 1 sub defined therein. # spent 973µs executing statements in string eval
# includes 15µs spent executing 4 calls to 1 sub defined therein. # spent 766µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 694µs executing statements in 2 string evals (merged)
# includes 10µs spent executing 4 calls to 1 sub defined therein. # spent 681µs executing statements in string eval
# includes 16µs spent executing 4 calls to 1 sub defined therein. # spent 617µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 568µs executing statements in string eval
# includes 4µs spent executing 2 calls to 1 sub defined therein. # spent 194µs executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 160µs executing statements in string eval
# includes 110µs spent executing 32 calls to 1 sub defined therein. # spent 138µs executing statements in string eval
# includes 96µs spent executing 28 calls to 1 sub defined therein. # spent 135µs executing statements in string eval
# includes 89µs spent executing 28 calls to 1 sub defined therein. # spent 134µs executing statements in string eval
# includes 92µs spent executing 30 calls to 1 sub defined therein. # spent 134µs executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 99µs executing statements in string eval
# includes 8µs spent executing 2 calls to 1 sub defined therein. # spent 95µs executing statements in string eval
# includes 68µs spent executing 18 calls to 1 sub defined therein. # spent 76µs executing statements in string eval
# includes 53µs spent executing 14 calls to 1 sub defined therein. # spent 61µs executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 60µs executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 50µs executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 42µs executing statements in string eval
# includes 27µs spent executing 6 calls to 1 sub defined therein. # spent 42µs executing statements in string eval
# includes 29µs spent executing 4 calls to 1 sub defined therein. # spent 41µs executing statements in string eval
# includes 25µs spent executing 8 calls to 1 sub defined therein. # spent 40µs executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 40µs executing statements in string eval
# includes 23µs spent executing 8 calls to 1 sub defined therein. # spent 39µs executing statements in string eval
# includes 25µs spent executing 8 calls to 1 sub defined therein. # spent 38µs executing statements in 3 string evals (merged)
# includes 16µs spent executing 6 calls to 1 sub defined therein. # spent 35µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 35µs executing statements in string eval
# includes 20µs spent executing 6 calls to 1 sub defined therein. # spent 34µs executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 33µs executing statements in 2 string evals (merged)
# includes 10µs spent executing 4 calls to 1 sub defined therein. # spent 32µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 30µs executing statements in 2 string evals (merged)
# includes 14µs spent executing 4 calls to 1 sub defined therein. # spent 29µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 25µs executing statements in string eval
# includes 14µs spent executing 4 calls to 1 sub defined therein. # spent 25µs executing statements in 2 string evals (merged)
# includes 10µs spent executing 4 calls to 1 sub defined therein. # spent 25µs executing statements in string eval
# includes 15µs spent executing 4 calls to 1 sub defined therein. # spent 25µs executing statements in string eval
# includes 11µs spent executing 4 calls to 1 sub defined therein. # spent 24µs executing statements in string eval
# includes 14µs spent executing 4 calls to 1 sub defined therein. # spent 23µs executing statements in string eval
# includes 14µs spent executing 4 calls to 1 sub defined therein. # spent 23µs executing statements in string eval
# includes 12µs spent executing 4 calls to 1 sub defined therein. # spent 23µs executing statements in string eval
# includes 11µs spent executing 4 calls to 1 sub defined therein. # spent 23µs executing statements in string eval
# includes 13µs spent executing 4 calls to 1 sub defined therein. # spent 23µs executing statements in string eval
# includes 14µs spent executing 4 calls to 1 sub defined therein. # spent 22µs executing statements in 2 string evals (merged)
# includes 9µs spent executing 4 calls to 1 sub defined therein. # spent 22µs executing statements in string eval
# includes 12µs spent executing 4 calls to 1 sub defined therein. # spent 22µs executing statements in string eval
# includes 12µs spent executing 4 calls to 1 sub defined therein. # spent 21µs executing statements in string eval
# includes 11µs spent executing 4 calls to 1 sub defined therein. # spent 21µs executing statements in string eval
# includes 11µs spent executing 4 calls to 1 sub defined therein. # spent 21µs executing statements in string eval
# includes 11µs spent executing 4 calls to 1 sub defined therein. # spent 21µs executing statements in string eval
# includes 12µs spent executing 4 calls to 1 sub defined therein. # spent 21µs executing statements in string eval
# includes 11µs spent executing 4 calls to 1 sub defined therein. # spent 21µs executing statements in string eval
# includes 11µs spent executing 4 calls to 1 sub defined therein. # spent 20µs executing statements in string eval
# includes 11µs spent executing 4 calls to 1 sub defined therein. # spent 20µs executing statements in string eval
# includes 11µs spent executing 4 calls to 1 sub defined therein. # spent 20µs executing statements in string eval
# includes 11µs spent executing 4 calls to 1 sub defined therein. # spent 20µs executing statements in string eval
# includes 11µs spent executing 4 calls to 1 sub defined therein. # spent 20µs executing statements in string eval
# includes 11µs spent executing 4 calls to 1 sub defined therein. # spent 20µs executing statements in string eval
# includes 11µs spent executing 4 calls to 1 sub defined therein. # spent 20µs executing statements in string eval
# includes 10µs spent executing 4 calls to 1 sub defined therein. # spent 19µs executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 18µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 18µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 17µs executing statements in string eval
# includes 10µs spent executing 2 calls to 1 sub defined therein. # spent 17µs executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 17µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 16µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 15µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 15µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 14µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 14µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 14µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 14µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 14µs executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 14µs executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 13µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 13µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 13µs executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 13µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 13µs executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 13µs executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 13µs executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 13µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 13µs executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 13µs executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 13µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 13µs executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 13µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 13µs executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 13µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 13µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 13µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 13µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 13µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 6µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 4µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 12µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 11µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 11µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 11µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 11µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 11µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 11µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 11µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 11µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 11µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 11µs executing statements in string eval
# includes 4µs spent executing 2 calls to 1 sub defined therein. # spent 11µs executing statements in string eval
# includes 4µs spent executing 2 calls to 1 sub defined therein. # spent 11µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 11µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein. # spent 11µs executing statements in string eval
# includes 4µs spent executing 2 calls to 1 sub defined therein. # spent 11µs executing statements in string eval
# includes 4µs spent executing 2 calls to 1 sub defined therein. # spent 11µs executing statements in string eval
# includes 4µs spent executing 2 calls to 1 sub defined therein. # spent 11µs executing statements in string eval
# includes 4µs spent executing 2 calls to 1 sub defined therein. # spent 11µs executing statements in string eval
# includes 5µs spent executing 2 calls to 1 sub defined therein.
808 })->()
809 }
81013µs};
811
812111µs1;
 
# spent 2µs within Class::Accessor::Grouped::CORE:match which was called: # once (2µs+0s) by base::import at line 17
sub Class::Accessor::Grouped::CORE:match; # opcode
# spent 108µs within Class::Accessor::Grouped::CORE:subst which was called 179 times, avg 605ns/call: # 179 times (108µs+0s) by Class::Accessor::Grouped::__ANON__[/2home/ss5/perl5/perlbrew/perls/perl-5.12.3/lib/site_perl/5.12.3/Class/Accessor/Grouped.pm:606] at line 599, avg 605ns/call
sub Class::Accessor::Grouped::CORE:subst; # opcode