← Index
NYTProf Performance Profile   « line view »
For svc/members/upsert
  Run on Tue Jan 13 11:50:22 2015
Reported on Tue Jan 13 12:09:49 2015

Filename/usr/share/perl5/DateTime/Format/Builder/Parser.pm
StatementsExecuted 562 statements in 3.29ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1111.09ms1.21msDateTime::Format::Builder::Parser::::BEGIN@375DateTime::Format::Builder::Parser::BEGIN@375
1021332µs1.15msDateTime::Format::Builder::Parser::::create_single_parserDateTime::Format::Builder::Parser::create_single_parser
31196µs1.25msDateTime::Format::Builder::Parser::::sort_parsersDateTime::Format::Builder::Parser::sort_parsers
32153µs1.33msDateTime::Format::Builder::Parser::::create_multiple_parsersDateTime::Format::Builder::Parser::create_multiple_parsers
101144µs44µsDateTime::Format::Builder::Parser::::paramsDateTime::Format::Builder::Parser::params
44433µs33µsDateTime::Format::Builder::Parser::::valid_paramsDateTime::Format::Builder::Parser::valid_params
142133µs40µsDateTime::Format::Builder::Parser::::__ANON__[:92]DateTime::Format::Builder::Parser::__ANON__[:92]
31122µs1.35msDateTime::Format::Builder::Parser::::create_parserDateTime::Format::Builder::Parser::create_parser
101120µs20µsDateTime::Format::Builder::Parser::::params_allDateTime::Format::Builder::Parser::params_all
51113µs13µsDateTime::Format::Builder::Parser::::merge_callbacksDateTime::Format::Builder::Parser::merge_callbacks
11112µs23µsDateTime::Format::Builder::Parser::::BEGIN@5DateTime::Format::Builder::Parser::BEGIN@5
142111µs11µsDateTime::Format::Builder::Parser::::__ANON__[:93]DateTime::Format::Builder::Parser::__ANON__[:93]
31111µs11µsDateTime::Format::Builder::Parser::::newDateTime::Format::Builder::Parser::new
111111µs11µsDateTime::Format::Builder::Parser::::whose_paramsDateTime::Format::Builder::Parser::whose_params
3119µs9µsDateTime::Format::Builder::Parser::::set_makerDateTime::Format::Builder::Parser::set_maker
1118µs41µsDateTime::Format::Builder::Parser::::BEGIN@8DateTime::Format::Builder::Parser::BEGIN@8
1118µs15µsDateTime::Format::Builder::Parser::::BEGIN@6DateTime::Format::Builder::Parser::BEGIN@6
14118µs8µsDateTime::Format::Builder::Parser::::CORE:matchDateTime::Format::Builder::Parser::CORE:match (opcode)
1117µs28µsDateTime::Format::Builder::Parser::::BEGIN@11DateTime::Format::Builder::Parser::BEGIN@11
1117µs28µsDateTime::Format::Builder::Parser::::BEGIN@7DateTime::Format::Builder::Parser::BEGIN@7
7117µs7µsDateTime::Format::Builder::Parser::::chain_parsersDateTime::Format::Builder::Parser::chain_parsers
3115µs5µsDateTime::Format::Builder::Parser::::set_parserDateTime::Format::Builder::Parser::set_parser
0000s0sDateTime::Format::Builder::Parser::::__ANON__[:217]DateTime::Format::Builder::Parser::__ANON__[:217]
0000s0sDateTime::Format::Builder::Parser::::__ANON__[:285]DateTime::Format::Builder::Parser::__ANON__[:285]
0000s0sDateTime::Format::Builder::Parser::::__ANON__[:342]DateTime::Format::Builder::Parser::__ANON__[:342]
0000s0sDateTime::Format::Builder::Parser::::create_single_objectDateTime::Format::Builder::Parser::create_single_object
0000s0sDateTime::Format::Builder::Parser::::failDateTime::Format::Builder::Parser::fail
0000s0sDateTime::Format::Builder::Parser::::makerDateTime::Format::Builder::Parser::maker
0000s0sDateTime::Format::Builder::Parser::::no_parserDateTime::Format::Builder::Parser::no_parser
0000s0sDateTime::Format::Builder::Parser::::on_failDateTime::Format::Builder::Parser::on_fail
0000s0sDateTime::Format::Builder::Parser::::parseDateTime::Format::Builder::Parser::parse
0000s0sDateTime::Format::Builder::Parser::::set_failDateTime::Format::Builder::Parser::set_fail
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package DateTime::Format::Builder::Parser;
2{
32900ns $DateTime::Format::Builder::Parser::VERSION = '0.81';
4}
5223µs234µs
# spent 23µs (12+11) within DateTime::Format::Builder::Parser::BEGIN@5 which was called: # once (12µs+11µs) by DateTime::Format::MySQL::BEGIN@11 at line 5
use strict;
# spent 23µs making 1 call to DateTime::Format::Builder::Parser::BEGIN@5 # spent 11µs making 1 call to strict::import
6222µs222µs
# spent 15µs (8+7) within DateTime::Format::Builder::Parser::BEGIN@6 which was called: # once (8µs+7µs) by DateTime::Format::MySQL::BEGIN@11 at line 6
use warnings;
# spent 15µs making 1 call to DateTime::Format::Builder::Parser::BEGIN@6 # spent 7µs making 1 call to warnings::import
7231µs250µs
# spent 28µs (7+22) within DateTime::Format::Builder::Parser::BEGIN@7 which was called: # once (7µs+22µs) by DateTime::Format::MySQL::BEGIN@11 at line 7
use Carp qw( croak );
# spent 28µs making 1 call to DateTime::Format::Builder::Parser::BEGIN@7 # spent 22µs making 1 call to Exporter::import
814µs133µs
# spent 41µs (8+33) within DateTime::Format::Builder::Parser::BEGIN@8 which was called: # once (8µs+33µs) by DateTime::Format::MySQL::BEGIN@11 at line 10
use Params::Validate qw(
# spent 33µs making 1 call to Exporter::import
9 validate SCALAR CODEREF UNDEF ARRAYREF
10120µs141µs);
# spent 41µs making 1 call to DateTime::Format::Builder::Parser::BEGIN@8
1121.15ms248µs
# spent 28µs (7+20) within DateTime::Format::Builder::Parser::BEGIN@11 which was called: # once (7µs+20µs) by DateTime::Format::MySQL::BEGIN@11 at line 11
use Scalar::Util qw( weaken );
# spent 28µs making 1 call to DateTime::Format::Builder::Parser::BEGIN@11 # spent 20µs making 1 call to Exporter::import
12
- -
16sub on_fail {
17 my ( $self, $input, $parent ) = @_;
18 my $maker = $self->maker;
19 if ( $maker and $maker->can('on_fail') ) {
20 $maker->on_fail($input);
21 }
22 else {
23 croak __PACKAGE__ . ": Invalid date format: $input";
24 }
25}
26
27sub no_parser {
28 croak "No parser set for this parser object.";
29}
30
31
# spent 11µs within DateTime::Format::Builder::Parser::new which was called 3 times, avg 4µs/call: # 3 times (11µs+0s) by DateTime::Format::Builder::Parser::create_multiple_parsers at line 225, avg 4µs/call
sub new {
323600ns my $class = shift;
3331µs $class = ref($class) || $class;
343700ns my $i = 0;
3536µs my $self = bless {
36 on_fail => \&on_fail,
37 parser => \&no_parser,
38 }, $class;
39
4038µs return $self;
41}
42
43sub maker { $_[0]->{maker} }
44
45
# spent 9µs within DateTime::Format::Builder::Parser::set_maker which was called 3 times, avg 3µs/call: # 3 times (9µs+0s) by DateTime::Format::Builder::Parser::create_multiple_parsers at line 240, avg 3µs/call
sub set_maker {
463600ns my $self = shift;
473600ns my $maker = shift;
48
4934µs $self->{maker} = $maker;
5031µs weaken $self->{maker}
51 if ref $self->{maker};
52
5337µs return $self;
54}
55
56sub fail {
57 my ( $self, $parent, $input ) = @_;
58 $self->{on_fail}->( $self, $input, $parent );
59}
60
61sub parse {
62 my ( $self, $parent, $input, @args ) = @_;
63 my $r = $self->{parser}->( $parent, $input, @args );
64 $self->fail( $parent, $input ) unless defined $r;
65 $r;
66}
67
68
# spent 5µs within DateTime::Format::Builder::Parser::set_parser which was called 3 times, avg 2µs/call: # 3 times (5µs+0s) by DateTime::Format::Builder::Parser::create_multiple_parsers at line 286, avg 2µs/call
sub set_parser {
6931µs my ( $self, $parser ) = @_;
7031µs $self->{parser} = $parser;
7136µs $self;
72}
73
74sub set_fail {
75 my ( $self, $fail ) = @_;
76 $self->{on_fail} = $fail;
77 $self;
78}
79
80
811900nsmy @callbacks = qw( on_match on_fail postprocess preprocess );
82
83{
84
85
861200ns my %params = (
87 common => {
88 length => {
89 type => SCALAR | ARRAYREF,
90 optional => 1,
91 callbacks => {
921449µs148µs
# spent 40µs (33+8) within DateTime::Format::Builder::Parser::__ANON__[/usr/share/perl5/DateTime/Format/Builder/Parser.pm:92] which was called 14 times, avg 3µs/call: # 7 times (19µs+4µs) by Params::Validate::XS::validate at line 164, avg 3µs/call # 7 times (14µs+4µs) by Params::Validate::XS::validate at line 185, avg 2µs/call
'is an int' => sub { ref $_[0] ? 1 : $_[0] !~ /\D/ },
# spent 8µs making 14 calls to DateTime::Format::Builder::Parser::CORE:match, avg 550ns/call
931425µs
# spent 11µs within DateTime::Format::Builder::Parser::__ANON__[/usr/share/perl5/DateTime/Format/Builder/Parser.pm:93] which was called 14 times, avg 814ns/call: # 7 times (6µs+0s) by Params::Validate::XS::validate at line 164, avg 886ns/call # 7 times (5µs+0s) by Params::Validate::XS::validate at line 185, avg 743ns/call
'not empty' => sub { ref $_[0] ? @{ $_[0] } >= 1 : 1 },
94 }
95 },
96
97 # Stuff used by callbacks
98 label => { type => SCALAR, optional => 1 },
99 (
100114µs map { $_ => { type => CODEREF | ARRAYREF, optional => 1 } }
101 @callbacks
102 ),
103 },
104 );
105
106
107
# spent 44µs within DateTime::Format::Builder::Parser::params which was called 10 times, avg 4µs/call: # 10 times (44µs+0s) by DateTime::Format::Builder::Parser::create_single_parser at line 185, avg 4µs/call
sub params {
108102µs my $self = shift;
109102µs my $caller = ref $self || $self;
1101051µs return { map { %$_ } @params{ $caller, 'common' } };
111 }
112
113
1141200ns my $all_params;
115
116
# spent 20µs within DateTime::Format::Builder::Parser::params_all which was called 10 times, avg 2µs/call: # 10 times (20µs+0s) by DateTime::Format::Builder::Parser::create_single_parser at line 164, avg 2µs/call
sub params_all {
1171016µs return $all_params if defined $all_params;
11818µs my %all_params = map { %$_ } values %params;
11915µs $_->{optional} = 1 for values %all_params;
12013µs $all_params = \%all_params;
121 }
122
123
1241500ns my %inverse;
125
126
# spent 33µs within DateTime::Format::Builder::Parser::valid_params which was called 4 times, avg 8µs/call: # once (9µs+0s) by DateTime::Format::Builder::Parser::BEGIN@1.2 at line 42 of DateTime/Format/Builder/Parser/Regex.pm # once (8µs+0s) by DateTime::Format::Builder::Parser::BEGIN@1 at line 20 of DateTime/Format/Builder/Parser/Dispatch.pm # once (8µs+0s) by DateTime::Format::Builder::Parser::BEGIN@1.3 at line 16 of DateTime/Format/Builder/Parser/Strptime.pm # once (8µs+0s) by DateTime::Format::Builder::Parser::BEGIN@1.1 at line 22 of DateTime/Format/Builder/Parser/Quick.pm
sub valid_params {
12742µs my $self = shift;
12844µs my $from = (caller)[0];
12945µs my %args = @_;
13042µs $params{$from} = \%args;
13146µs for ( keys %args ) {
132
133 # %inverse contains keys matching all the
134 # possible params; values are the class if and
135 # only if that class is the only one that uses
136 # the given param.
13786µs $inverse{$_} = exists $inverse{$_} ? undef : $from;
138 }
13941µs undef $all_params;
140417µs 1;
141 }
142
143
144
# spent 11µs within DateTime::Format::Builder::Parser::whose_params which was called 11 times, avg 973ns/call: # 11 times (11µs+0s) by DateTime::Format::Builder::Parser::create_single_parser at line 174, avg 973ns/call
sub whose_params {
145112µs my $param = shift;
1461119µs return $inverse{$param};
147 }
148}
149
150
151sub create_single_object {
152 my ($self) = shift;
153 my $obj = $self->new;
154 my $parser = $self->create_single_parser(@_);
155
156 $obj->set_parser($parser);
157}
158
159
# spent 1.15ms (332µs+814µs) within DateTime::Format::Builder::Parser::create_single_parser which was called 10 times, avg 115µs/call: # 7 times (244µs+592µs) by DateTime::Format::Builder::Parser::sort_parsers at line 305, avg 119µs/call # 3 times (88µs+222µs) by DateTime::Format::Builder::Parser::sort_parsers at line 315, avg 103µs/call
sub create_single_parser {
160102µs my $class = shift;
161102µs return $_[0] if ref $_[0] eq 'CODE'; # already code
162101µs @_ = %{ $_[0] } if ref $_[0] eq 'HASH'; # turn hashref into hash
163 # ordinary boring sort
16410217µs44287µs my %args = validate( @_, params_all() );
# spent 228µs making 10 calls to Params::Validate::XS::validate, avg 23µs/call # spent 23µs making 7 calls to DateTime::Format::Builder::Parser::__ANON__[DateTime/Format/Builder/Parser.pm:92], avg 3µs/call # spent 20µs making 10 calls to DateTime::Format::Builder::Parser::params_all, avg 2µs/call # spent 10µs making 10 calls to DateTime::Format::Builder::Parser::Regex::__ANON__[DateTime/Format/Builder/Parser/Regex.pm:24], avg 1µs/call # spent 6µs making 7 calls to DateTime::Format::Builder::Parser::__ANON__[DateTime/Format/Builder/Parser.pm:93], avg 886ns/call
165
166 # Determine variables for ease of reference.
167105µs for (@callbacks) {
1684022µs513µs $args{$_} = $class->merge_callbacks( $args{$_} ) if $args{$_};
# spent 13µs making 5 calls to DateTime::Format::Builder::Parser::merge_callbacks, avg 3µs/call
169 }
170
171 # Determine parser class
172101µs my $from;
173107µs for ( keys %args ) {
174118µs1111µs $from = whose_params($_);
# spent 11µs making 11 calls to DateTime::Format::Builder::Parser::whose_params, avg 973ns/call
175114µs next if ( not defined $from ) or ( $from eq 'common' );
176104µs last;
177 }
17810900ns croak "Could not identify a parsing module to use." unless $from;
179
180 # Find and call parser creation method
1811083µs1018µs my $method = $from->can("create_parser")
# spent 18µs making 10 calls to UNIVERSAL::can, avg 2µs/call
182 or croak
183 "Can't create a $_ parser (no appropriate create_parser method)";
1841016µs my @args = %args;
18510212µs44270µs %args = validate( @args, $from->params() );
# spent 194µs making 10 calls to Params::Validate::XS::validate, avg 19µs/call # spent 44µs making 10 calls to DateTime::Format::Builder::Parser::params, avg 4µs/call # spent 18µs making 7 calls to DateTime::Format::Builder::Parser::__ANON__[DateTime/Format/Builder/Parser.pm:92], avg 2µs/call # spent 9µs making 10 calls to DateTime::Format::Builder::Parser::Regex::__ANON__[DateTime/Format/Builder/Parser/Regex.pm:24], avg 940ns/call # spent 5µs making 7 calls to DateTime::Format::Builder::Parser::__ANON__[DateTime/Format/Builder/Parser.pm:93], avg 743ns/call
1861038µs10286µs $from->$method(%args);
# spent 286µs making 10 calls to DateTime::Format::Builder::Parser::Regex::create_parser, avg 29µs/call
187}
188
189
190
# spent 13µs within DateTime::Format::Builder::Parser::merge_callbacks which was called 5 times, avg 3µs/call: # 5 times (13µs+0s) by DateTime::Format::Builder::Parser::create_single_parser at line 168, avg 3µs/call
sub merge_callbacks {
19151µs my $self = shift;
192
19351µs return unless @_; # No arguments
1945700ns return unless $_[0]; # Irrelevant argument
19552µs my @callbacks = @_;
19651µs if ( @_ == 1 ) {
197511µs return $_[0] if ref $_[0] eq 'CODE';
198 @callbacks = @{ $_[0] } if ref $_[0] eq 'ARRAY';
199 }
200 return unless @callbacks;
201
202 for (@callbacks) {
203 croak "All callbacks must be coderefs!" unless ref $_ eq 'CODE';
204 }
205
206 return sub {
207 my $rv;
208 my %args = @_;
209 for my $cb (@callbacks) {
210 $rv = $cb->(%args);
211 return $rv unless $rv;
212
213 # Ugh. Symbiotic. All but postprocessor return the date.
214 $args{input} = $rv unless $args{parsed};
215 }
216 $rv;
217 };
218}
219
220
221
# spent 1.33ms (53µs+1.27) within DateTime::Format::Builder::Parser::create_multiple_parsers which was called 3 times, avg 442µs/call: # 2 times (36µs+257µs) by DateTime::Format::Builder::Parser::create_parser at line 368, avg 147µs/call # once (16µs+1.02ms) by DateTime::Format::Builder::Parser::create_parser at line 362
sub create_multiple_parsers {
2223500ns my $class = shift;
22331µs my ( $options, @specs ) = @_;
224
22533µs311µs my $obj = $class->new;
# spent 11µs making 3 calls to DateTime::Format::Builder::Parser::new, avg 4µs/call
226
227 # Organise the specs, and transform them into parsers.
22835µs31.25ms my ( $lengths, $others ) = $class->sort_parsers( $options, \@specs );
# spent 1.25ms making 3 calls to DateTime::Format::Builder::Parser::sort_parsers, avg 416µs/call
229
230 # Merge callbacks if any.
23132µs for ('preprocess') {
23232µs $options->{$_} = $class->merge_callbacks( $options->{$_} )
233 if $options->{$_};
234 }
235
236 # Custom fail method?
23731µs $obj->set_fail( $options->{on_fail} ) if exists $options->{on_fail};
238
239 # Who's our maker?
24035µs39µs $obj->set_maker( $options->{maker} ) if exists $options->{maker};
# spent 9µs making 3 calls to DateTime::Format::Builder::Parser::set_maker, avg 3µs/call
241
242 # We don't want to save the whole options hash as a closure, since
243 # that can cause a circular reference when $options->{maker} is
244 # set.
24531µs my $preprocess = $options->{preprocess};
246
247 # These are the innards of a multi-parser.
248 my $parser = sub {
249 my ( $self, $date, @args ) = @_;
250 return unless defined $date;
251
252 # Parameters common to the callbacks. Pre-prepared.
253 my %param = (
254 self => $self,
255 ( @args ? ( args => \@args ) : () ),
256 );
257
258 my %p;
259
260 # Preprocess and potentially fill %p
261 if ($preprocess) {
262 $date = $preprocess->( input => $date, parsed => \%p, %param );
263 }
264
265 # Find length parser
266 if (%$lengths) {
267 my $length = length $date;
268 my $parser = $lengths->{$length};
269 if ($parser) {
270
271 # Found one, call it with _copy_ of %p
272 my $dt = $parser->( $self, $date, {%p}, @args );
273 return $dt if defined $dt;
274 }
275 }
276
277 # Or calls all others, with _copy_ of %p
278 for my $parser (@$others) {
279 my $dt = $parser->( $self, $date, {%p}, @args );
280 return $dt if defined $dt;
281 }
282
283 # Failed, return undef.
284 return;
28538µs };
286311µs35µs $obj->set_parser($parser);
# spent 5µs making 3 calls to DateTime::Format::Builder::Parser::set_parser, avg 2µs/call
287}
288
289
290
# spent 1.25ms (96µs+1.15) within DateTime::Format::Builder::Parser::sort_parsers which was called 3 times, avg 416µs/call: # 3 times (96µs+1.15ms) by DateTime::Format::Builder::Parser::create_multiple_parsers at line 228, avg 416µs/call
sub sort_parsers {
2913600ns my $class = shift;
2923800ns my ( $options, $specs ) = @_;
2933200ns my ( %lengths, @others );
294
29532µs for my $spec (@$specs) {
296
297 # Put coderefs straight into the 'other' heap.
2981011µs if ( ref $spec eq 'CODE' ) {
299 push @others, $spec;
300 }
301
302 # Specifications...
303 elsif ( ref $spec eq 'HASH' ) {
304103µs if ( exists $spec->{length} ) {
305718µs7835µs my $code = $class->create_single_parser(%$spec);
# spent 835µs making 7 calls to DateTime::Format::Builder::Parser::create_single_parser, avg 119µs/call
306 my @lengths
307 = ref $spec->{length}
30876µs ? @{ $spec->{length} }
309 : ( $spec->{length} );
31074µs for my $length (@lengths) {
311711µs push @{ $lengths{$length} }, $code;
312 }
313 }
314 else {
31536µs3310µs push @others, $class->create_single_parser(%$spec);
# spent 310µs making 3 calls to DateTime::Format::Builder::Parser::create_single_parser, avg 103µs/call
316 }
317 }
318
319 # Something else
320 else {
321 croak "Invalid specification in list.";
322 }
323 }
324
325313µs77µs while ( my ( $length, $parsers ) = each %lengths ) {
# spent 7µs making 7 calls to DateTime::Format::Builder::Parser::chain_parsers, avg 986ns/call
326 $lengths{$length} = $class->chain_parsers($parsers);
327 }
328
32938µs return ( \%lengths, \@others );
330}
331
332
# spent 7µs within DateTime::Format::Builder::Parser::chain_parsers which was called 7 times, avg 986ns/call: # 7 times (7µs+0s) by DateTime::Format::Builder::Parser::sort_parsers at line 325, avg 986ns/call
sub chain_parsers {
33371µs my ( $self, $parsers ) = @_;
334713µs return $parsers->[0] if @$parsers == 1;
335 return sub {
336 my $self = shift;
337 for my $parser (@$parsers) {
338 my $rv = $self->$parser(@_);
339 return $rv if defined $rv;
340 }
341 return undef;
342 };
343}
344
345
346
# spent 1.35ms (22µs+1.33) within DateTime::Format::Builder::Parser::create_parser which was called 3 times, avg 450µs/call: # 3 times (22µs+1.33ms) by DateTime::Format::Builder::create_parser at line 122 of DateTime/Format/Builder.pm, avg 450µs/call
sub create_parser {
3473700ns my $class = shift;
34831µs if ( not ref $_[0] ) {
349
350 # Simple case of single specification as a hash
351 return $class->create_single_object(@_);
352 }
353
354 # Let's see if we were given an options block
3553500ns my %options;
35632µs while ( ref $_[0] eq 'ARRAY' ) {
3573600ns my $options = shift;
35834µs %options = ( %options, @$options );
359 }
360
361 # Now, can we create a multi-parser out of the remaining arguments?
36234µs11.03ms if ( ref $_[0] eq 'HASH' or ref $_[0] eq 'CODE' ) {
363 return $class->create_multiple_parsers( \%options, @_ );
364 }
365 else {
366 # If it wasn't a HASH or CODE, then it was (ideally)
367 # a list of pairs describing a single specification.
36829µs2294µs return $class->create_multiple_parsers( \%options, {@_} );
# spent 294µs making 2 calls to DateTime::Format::Builder::Parser::create_multiple_parsers, avg 147µs/call
369 }
370}
371
372
373# Find all our workers
374{
3754793µs31.22ms
# spent 1.21ms (1.09+115µs) within DateTime::Format::Builder::Parser::BEGIN@375 which was called: # once (1.09ms+115µs) by DateTime::Format::MySQL::BEGIN@11 at line 375
use Class::Factory::Util 1.6;
# spent 1.21ms making 1 call to DateTime::Format::Builder::Parser::BEGIN@375 # spent 9µs making 1 call to version::_VERSION # spent 5µs making 1 call to Class::Factory::Util::import
376
37714µs1713µs foreach my $worker ( __PACKAGE__->subclasses ) {
# spent 713µs making 1 call to Class::Factory::Util::_subclasses
3785150µs eval "use DateTime::Format::Builder::Parser::$worker;";
# spent 829µs executing statements in string eval
# includes 1.28ms spent executing 1 call to 1 sub defined therein. # spent 679µs executing statements in string eval
# includes 957µs spent executing 1 call to 1 sub defined therein. # spent 653µs executing statements in string eval
# includes 938µs spent executing 1 call to 1 sub defined therein. # spent 646µs executing statements in string eval
# includes 1.06ms spent executing 1 call to 1 sub defined therein. # spent 9µs executing statements in string eval
# includes 7µs spent executing 1 call to 1 sub defined therein.
37952µs die $@ if $@;
380 }
381}
382
38317µs1;
384
385# ABSTRACT: Parser creation
386
387__END__
 
# spent 8µs within DateTime::Format::Builder::Parser::CORE:match which was called 14 times, avg 550ns/call: # 14 times (8µs+0s) by DateTime::Format::Builder::Parser::__ANON__[/usr/share/perl5/DateTime/Format/Builder/Parser.pm:92] at line 92, avg 550ns/call
sub DateTime::Format::Builder::Parser::CORE:match; # opcode