← Index
NYTProf Performance Profile   « block view • line view • sub view »
For /usr/share/koha/opac/cgi-bin/opac/opac-search.pl
  Run on Tue Oct 15 11:58:52 2013
Reported on Tue Oct 15 12:01:06 2013

Filename/usr/share/perl5/DateTime/Format/Builder.pm
StatementsExecuted 91 statements in 1.80ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11195µs3.98msDateTime::Format::Builder::::create_classDateTime::Format::Builder::create_class
31137µs3.77msDateTime::Format::Builder::::create_parserDateTime::Format::Builder::create_parser
11129µs29µsDateTime::Format::Builder::::BEGIN@11DateTime::Format::Builder::BEGIN@11
31129µs3.81msDateTime::Format::Builder::::create_end_parserDateTime::Format::Builder::create_end_parser
11126µs172µsDateTime::Format::Builder::::BEGIN@14DateTime::Format::Builder::BEGIN@14
11123µs43µsDateTime::Format::Builder::::BEGIN@13DateTime::Format::Builder::BEGIN@13
11119µs19µsDateTime::Format::Builder::::create_constructorDateTime::Format::Builder::create_constructor
11119µs23µsDateTime::Format::Builder::::BEGIN@10DateTime::Format::Builder::BEGIN@10
11114µs68µsDateTime::Format::Builder::::BEGIN@17DateTime::Format::Builder::BEGIN@17
31114µs14µsDateTime::Format::Builder::::create_methodDateTime::Format::Builder::create_method
11111µs30µsDateTime::Format::Builder::::BEGIN@76DateTime::Format::Builder::BEGIN@76
11110µs3.99msDateTime::Format::Builder::::importDateTime::Format::Builder::import
11110µs24µsDateTime::Format::Builder::::BEGIN@122DateTime::Format::Builder::BEGIN@122
11110µs66µsDateTime::Format::Builder::::BEGIN@12DateTime::Format::Builder::BEGIN@12
0000s0sDateTime::Format::Builder::::__ANON__[:134]DateTime::Format::Builder::__ANON__[:134]
0000s0sDateTime::Format::Builder::::__ANON__[:190]DateTime::Format::Builder::__ANON__[:190]
0000s0sDateTime::Format::Builder::::__ANON__[:230]DateTime::Format::Builder::__ANON__[:230]
0000s0sDateTime::Format::Builder::::cloneDateTime::Format::Builder::clone
0000s0sDateTime::Format::Builder::::format_datetimeDateTime::Format::Builder::format_datetime
0000s0sDateTime::Format::Builder::::get_parserDateTime::Format::Builder::get_parser
0000s0sDateTime::Format::Builder::::newDateTime::Format::Builder::new
0000s0sDateTime::Format::Builder::::on_failDateTime::Format::Builder::on_fail
0000s0sDateTime::Format::Builder::::parse_datetimeDateTime::Format::Builder::parse_datetime
0000s0sDateTime::Format::Builder::::parserDateTime::Format::Builder::parser
0000s0sDateTime::Format::Builder::::set_parserDateTime::Format::Builder::set_parser
0000s0sDateTime::Format::Builder::::verboseDateTime::Format::Builder::verbose
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;
2# $Id: Builder.pm 3748 2007-09-01 20:56:42Z autarch $
3
4=begin comments
5
- -
10329µs227µs
# spent 23µs (19+4) within DateTime::Format::Builder::BEGIN@10 which was called: # once (19µs+4µs) by DateTime::Format::MySQL::BEGIN@11 at line 10
use strict;
# spent 23µs making 1 call to DateTime::Format::Builder::BEGIN@10 # spent 4µs making 1 call to strict::import
11347µs129µs
# spent 29µs within DateTime::Format::Builder::BEGIN@11 which was called: # once (29µs+0s) by DateTime::Format::MySQL::BEGIN@11 at line 11
use 5.005;
# spent 29µs making 1 call to DateTime::Format::Builder::BEGIN@11
12350µs2123µs
# spent 66µs (10+57) within DateTime::Format::Builder::BEGIN@12 which was called: # once (10µs+57µs) by DateTime::Format::MySQL::BEGIN@11 at line 12
use Carp;
# spent 66µs making 1 call to DateTime::Format::Builder::BEGIN@12 # spent 57µs making 1 call to Exporter::import
13397µs264µs
# spent 43µs (23+20) within DateTime::Format::Builder::BEGIN@13 which was called: # once (23µs+20µs) by DateTime::Format::MySQL::BEGIN@11 at line 13
use DateTime 0.12;
# spent 43µs making 1 call to DateTime::Format::Builder::BEGIN@13 # spent 20µs making 1 call to UNIVERSAL::VERSION
141147µs
# spent 172µs (26+147) within DateTime::Format::Builder::BEGIN@14 which was called: # once (26µs+147µs) by DateTime::Format::MySQL::BEGIN@11 at line 16
use Params::Validate qw(
# spent 147µs making 1 call to Exporter::import
15 validate SCALAR ARRAYREF HASHREF SCALARREF CODEREF GLOB GLOBREF UNDEF
16366µs1172µs);
# spent 172µs making 1 call to DateTime::Format::Builder::BEGIN@14
173211µs2121µs
# spent 68µs (14+54) within DateTime::Format::Builder::BEGIN@17 which was called: # once (14µs+54µs) by DateTime::Format::MySQL::BEGIN@11 at line 17
use vars qw( $VERSION %dispatch_data );
# spent 68µs making 1 call to DateTime::Format::Builder::BEGIN@17 # spent 54µs making 1 call to vars::import
18
191900nsmy $parser = 'DateTime::Format::Builder::Parser';
201400ns$VERSION = '0.7901';
21
22# Developer oriented methods
23
24=pod
25
- -
30sub verbose
31{
32 warn "Use of verbose() deprecated for the interim.";
33 1;
34}
35
36=pod
37
- -
45sub import
46
# spent 3.99ms (10µs+3.98) within DateTime::Format::Builder::import which was called: # once (10µs+3.98ms) by DateTime::Format::MySQL::BEGIN@11 at line 11 of DateTime/Format/MySQL.pm
{
4729µs my $class = shift;
4813.98ms $class->create_class( @_, class => (caller)[0] ) if @_;
# spent 3.98ms making 1 call to DateTime::Format::Builder::create_class
49}
50
51=pod
52
- -
58sub create_class
59
# spent 3.98ms (95µs+3.89) within DateTime::Format::Builder::create_class which was called: # once (95µs+3.89ms) by DateTime::Format::Builder::import at line 48
{
6022109µs my $class = shift;
61141µs159µs my %args = validate( @_, {
# spent 59µs making 1 call to Params::Validate::_validate
# spent 4µs executing statements in string eval
62 class => { type => SCALAR, default => (caller)[0] },
63 version => { type => SCALAR, optional => 1 },
64 verbose => { type => SCALAR|GLOBREF|GLOB, optional => 1 },
65 parsers => { type => HASHREF },
66 groups => { type => HASHREF, optional => 1 },
67 constructor => { type => UNDEF|SCALAR|CODEREF, optional => 1 },
68 });
69
70 verbose( $args{verbose} ) if exists $args{verbose};
71
72 my $target = $args{class}; # where we're writing our methods and such.
73
74 # Create own lovely new package
75 {
763241µs249µs
# spent 30µs (11+19) within DateTime::Format::Builder::BEGIN@76 which was called: # once (11µs+19µs) by DateTime::Format::MySQL::BEGIN@11 at line 76
no strict 'refs';
# spent 30µs making 1 call to DateTime::Format::Builder::BEGIN@76 # spent 19µs making 1 call to strict::unimport
77
78
79 ${"${target}::VERSION"} = $args{version} if exists $args{version};
80
81119µs $class->create_constructor(
# spent 19µs making 1 call to DateTime::Format::Builder::create_constructor
82 $target, exists $args{constructor}, $args{constructor} );
83
84 # Turn groups of parser specs in to groups of parsers
85 {
86 my $specs = $args{groups};
87 my %groups;
88
89 for my $label ( keys %$specs )
90 {
91 my $parsers = $specs->{$label};
92 my $code = $class->create_parser( $parsers );
93 $groups{$label} = $code;
94 }
95
96 $dispatch_data{$target} = \%groups;
97 }
98
99 # Write all our parser methods, creating parsers as we go.
100 while (my ($method, $parsers) = each %{ $args{parsers} })
101 {
102 my $globname = $target."::$method";
103 croak "Will not override a preexisting method $method()" if defined &{$globname};
10433.81ms *$globname = $class->create_end_parser( $parsers );
# spent 3.81ms making 3 calls to DateTime::Format::Builder::create_end_parser, avg 1.27ms/call
105 }
106 }
107
108}
109
110sub create_constructor
111
# spent 19µs within DateTime::Format::Builder::create_constructor which was called: # once (19µs+0s) by DateTime::Format::Builder::create_class at line 81
{
112921µs my $class = shift;
113 my ( $target, $intended, $value ) = @_;
114
115 my $new = $target."::new";
116 $value = 1 unless $intended;
117
118 return unless $value;
119 return if not $intended and defined &$new;
120 croak "Will not override a preexisting constructor new()" if defined &$new;
121
1223706µs237µs
# spent 24µs (10+13) within DateTime::Format::Builder::BEGIN@122 which was called: # once (10µs+13µs) by DateTime::Format::MySQL::BEGIN@11 at line 122
no strict 'refs';
# spent 24µs making 1 call to DateTime::Format::Builder::BEGIN@122 # spent 13µs making 1 call to strict::unimport
123
124 return *$new = $value if ref $value eq 'CODE';
125 return *$new = sub {
126 my $class = shift;
127 croak "${class}->new takes no parameters." if @_;
128
129 my $self = bless {}, ref($class)||$class;
130 # If called on an object, clone, but we've nothing to
131 # clone
132
133 $self;
134 };
135}
136
137=pod
138
- -
145sub create_parser
146
# spent 3.77ms (37µs+3.73) within DateTime::Format::Builder::create_parser which was called 3 times, avg 1.26ms/call: # 3 times (37µs+3.73ms) by DateTime::Format::Builder::create_end_parser at line 174, avg 1.26ms/call
{
1471839µs my $class = shift;
148 my @common = ( maker => $class );
149 if (@_ == 1)
150 {
151 my $parsers = shift;
152 my @parsers = (
153 (ref $parsers eq 'HASH' ) ? %$parsers :
154 ( ( ref $parsers eq 'ARRAY' ) ? @$parsers : $parsers)
155 );
15633.73ms $parser->create_parser( \@common, @parsers );
# spent 3.73ms making 3 calls to DateTime::Format::Builder::Parser::create_parser, avg 1.24ms/call
157 }
158 else
159 {
160 $parser->create_parser( \@common, @_ );
161 }
162}
163
164=pod
165
- -
171sub create_end_parser
172
# spent 3.81ms (29µs+3.78) within DateTime::Format::Builder::create_end_parser which was called 3 times, avg 1.27ms/call: # 3 times (29µs+3.78ms) by DateTime::Format::Builder::create_class at line 104, avg 1.27ms/call
{
173622µs my ($class, $parsers) = @_;
17463.78ms $class->create_method( $class->create_parser( $parsers ) );
# spent 3.77ms making 3 calls to DateTime::Format::Builder::create_parser, avg 1.26ms/call # spent 14µs making 3 calls to DateTime::Format::Builder::create_method, avg 5µs/call
175}
176
177=pod
178
- -
184sub create_method
185
# spent 14µs within DateTime::Format::Builder::create_method which was called 3 times, avg 5µs/call: # 3 times (14µs+0s) by DateTime::Format::Builder::create_end_parser at line 174, avg 5µs/call
{
186617µs my ($class, $parser) = @_;
187 return sub {
188 my $self = shift;
189 $parser->parse( $self, @_);
190 }
191}
192
193=pod
194
- -
200sub on_fail
201{
202 my ($class, $input) = @_;
203
204 my $pkg;
205 my $i = 0;
206 while (($pkg) = caller($i++)) {
207 last if (!UNIVERSAL::isa($pkg, 'DateTime::Format::Builder') &&
208 !UNIVERSAL::isa($pkg, 'DateTime::Format::Builder::Parser'));
209 }
210 local $Carp::CarpLevel = $i;
211 croak "Invalid date format: $input";
212}
213
214#
215# User oriented methods
216#
217
218=pod
219
- -
225sub new
226{
227 my $class = shift;
228 croak "Constructor 'new' takes no parameters" if @_;
229 my $self = bless {
230 parser => sub { croak "No parser set." }
231 }, ref($class)||$class;
232 if (ref $class)
233 {
234 # If called on an object, clone
235 $self->set_parser( $class->get_parser );
236 # and that's it. we don't store that much info per object
237 }
238 return $self;
239}
240
241sub parser
242{
243 my $class = shift;
244 my $parser = $class->create_end_parser( \@_ );
245
246 # Do we need to instantiate a new object for return,
247 # or are we modifying an existing object?
248 my $self;
249 $self = ref $class ? $class : $class->new();
250
251 $self->set_parser( $parser );
252
253 $self;
254}
255
256sub clone
257{
258 my $self = shift;
259 croak "Calling object method as class method!" unless ref $self;
260 return $self->new();
261}
262
263sub set_parser
264{
265 my ($self, $parser) = @_;
266 croak "set_parser given something other than a coderef" unless $parser
267 and ref $parser eq 'CODE';
268 $self->{parser} = $parser;
269 $self;
270}
271
272sub get_parser
273{
274 my ($self) = @_;
275 return $self->{parser};
276}
277
278sub parse_datetime
279{
280 my $self = shift;
281 croak "parse_datetime is an object method, not a class method."
282 unless ref $self and $self->isa( __PACKAGE__ );
283 croak "No date specified." unless @_;
284 return $self->{parser}->( $self, @_ );
285}
286
287sub format_datetime
288{
289 croak __PACKAGE__."::format_datetime not implemented.";
290}
291
292189µsrequire DateTime::Format::Builder::Parser;
293
294
295=pod
296
- -
30116µs1;