← 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:51 2015

Filename/usr/lib/x86_64-linux-gnu/perl5/5.20/Template/Exception.pm
StatementsExecuted 14 statements in 454µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11113µs25µsTemplate::Exception::::BEGIN@22Template::Exception::BEGIN@22
1119µs14µsTemplate::Exception::::BEGIN@23Template::Exception::BEGIN@23
1118µs38µsTemplate::Exception::::BEGIN@27Template::Exception::BEGIN@27
1118µs38µsTemplate::Exception::::BEGIN@24Template::Exception::BEGIN@24
1116µs27µsTemplate::Exception::::BEGIN@25Template::Exception::BEGIN@25
1116µs24µsTemplate::Exception::::BEGIN@26Template::Exception::BEGIN@26
0000s0sTemplate::Exception::::as_stringTemplate::Exception::as_string
0000s0sTemplate::Exception::::infoTemplate::Exception::info
0000s0sTemplate::Exception::::newTemplate::Exception::new
0000s0sTemplate::Exception::::select_handlerTemplate::Exception::select_handler
0000s0sTemplate::Exception::::textTemplate::Exception::text
0000s0sTemplate::Exception::::typeTemplate::Exception::type
0000s0sTemplate::Exception::::type_infoTemplate::Exception::type_info
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1#============================================================= -*-Perl-*-
2#
3# Template::Exception
4#
5# DESCRIPTION
6# Module implementing a generic exception class used for error handling
7# in the Template Toolkit.
8#
9# AUTHOR
10# Andy Wardley <abw@wardley.org>
11#
12# COPYRIGHT
13# Copyright (C) 1996-2007 Andy Wardley. All Rights Reserved.
14#
15# This module is free software; you can redistribute it and/or
16# modify it under the same terms as Perl itself.
17#
18#========================================================================
19
20package Template::Exception;
21
22224µs237µs
# spent 25µs (13+12) within Template::Exception::BEGIN@22 which was called: # once (13µs+12µs) by Template::Service::BEGIN@27 at line 22
use strict;
# spent 25µs making 1 call to Template::Exception::BEGIN@22 # spent 12µs making 1 call to strict::import
23223µs219µs
# spent 14µs (9+5) within Template::Exception::BEGIN@23 which was called: # once (9µs+5µs) by Template::Service::BEGIN@27 at line 23
use warnings;
# spent 14µs making 1 call to Template::Exception::BEGIN@23 # spent 5µs making 1 call to warnings::import
24224µs268µs
# spent 38µs (8+30) within Template::Exception::BEGIN@24 which was called: # once (8µs+30µs) by Template::Service::BEGIN@27 at line 24
use constant TYPE => 0;
# spent 38µs making 1 call to Template::Exception::BEGIN@24 # spent 30µs making 1 call to constant::import
25221µs249µs
# spent 27µs (6+21) within Template::Exception::BEGIN@25 which was called: # once (6µs+21µs) by Template::Service::BEGIN@27 at line 25
use constant INFO => 1;
# spent 27µs making 1 call to Template::Exception::BEGIN@25 # spent 22µs making 1 call to constant::import
26227µs243µs
# spent 24µs (6+19) within Template::Exception::BEGIN@26 which was called: # once (6µs+19µs) by Template::Service::BEGIN@27 at line 26
use constant TEXT => 2;
# spent 24µs making 1 call to Template::Exception::BEGIN@26 # spent 19µs making 1 call to constant::import
272333µs268µs
# spent 38µs (8+30) within Template::Exception::BEGIN@27 which was called: # once (8µs+30µs) by Template::Service::BEGIN@27 at line 27
use overload q|""| => "as_string", fallback => 1;
# spent 38µs making 1 call to Template::Exception::BEGIN@27 # spent 30µs making 1 call to overload::import
28
291300nsour $VERSION = 2.70;
30
31
32#------------------------------------------------------------------------
33# new($type, $info, \$text)
34#
35# Constructor method used to instantiate a new Template::Exception
36# object. The first parameter should contain the exception type. This
37# can be any arbitrary string of the caller's choice to represent a
38# specific exception. The second parameter should contain any
39# information (i.e. error message or data reference) relevant to the
40# specific exception event. The third optional parameter may be a
41# reference to a scalar containing output text from the template
42# block up to the point where the exception was thrown.
43#------------------------------------------------------------------------
44
45sub new {
46 my ($class, $type, $info, $textref) = @_;
47 bless [ $type, $info, $textref ], $class;
48}
49
50
51#------------------------------------------------------------------------
52# type()
53# info()
54# type_info()
55#
56# Accessor methods to return the internal TYPE and INFO fields.
57#------------------------------------------------------------------------
58
59sub type {
60 $_[0]->[ TYPE ];
61}
62
63sub info {
64 $_[0]->[ INFO ];
65}
66
67sub type_info {
68 my $self = shift;
69 @$self[ TYPE, INFO ];
70}
71
72#------------------------------------------------------------------------
73# text()
74# text(\$pretext)
75#
76# Method to return the text referenced by the TEXT member. A text
77# reference may be passed as a parameter to supercede the existing
78# member. The existing text is added to the *end* of the new text
79# before being stored. This facility is provided for template blocks
80# to gracefully de-nest when an exception occurs and allows them to
81# reconstruct their output in the correct order.
82#------------------------------------------------------------------------
83
84sub text {
85 my ($self, $newtextref) = @_;
86 my $textref = $self->[ TEXT ];
87
88 if ($newtextref) {
89 $$newtextref .= $$textref if $textref && $textref ne $newtextref;
90 $self->[ TEXT ] = $newtextref;
91 return '';
92 }
93 elsif ($textref) {
94 return $$textref;
95 }
96 else {
97 return '';
98 }
99}
100
101
102#------------------------------------------------------------------------
103# as_string()
104#
105# Accessor method to return a string indicating the exception type and
106# information.
107#------------------------------------------------------------------------
108
109sub as_string {
110 my $self = shift;
111 return $self->[ TYPE ] . ' error - ' . $self->[ INFO ];
112}
113
114
115#------------------------------------------------------------------------
116# select_handler(@types)
117#
118# Selects the most appropriate handler for the exception TYPE, from
119# the list of types passed in as parameters. The method returns the
120# item which is an exact match for TYPE or the closest, more
121# generic handler (e.g. foo being more generic than foo.bar, etc.)
122#------------------------------------------------------------------------
123
124sub select_handler {
125 my ($self, @options) = @_;
126 my $type = $self->[ TYPE ];
127 my %hlut;
128 @hlut{ @options } = (1) x @options;
129
130 while ($type) {
131 return $type if $hlut{ $type };
132
133 # strip .element from the end of the exception type to find a
134 # more generic handler
135 $type =~ s/\.?[^\.]*$//;
136 }
137 return undef;
138}
139
14012µs1;
141
142__END__