← Index
NYTProf Performance Profile   « line view »
For rbm/rbm
  Run on Wed Feb 12 20:36:06 2020
Reported on Wed Feb 12 21:42:25 2020

Filename/usr/lib/x86_64-linux-gnu/perl5/5.28/Template/Exception.pm
StatementsExecuted 14 statements in 444µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11111µs13µsTemplate::Exception::::BEGIN@22Template::Exception::BEGIN@22
1118µs45µsTemplate::Exception::::BEGIN@27Template::Exception::BEGIN@27
1116µs52µsTemplate::Exception::::BEGIN@24Template::Exception::BEGIN@24
1115µs16µsTemplate::Exception::::BEGIN@23Template::Exception::BEGIN@23
1115µs28µsTemplate::Exception::::BEGIN@25Template::Exception::BEGIN@25
1114µs25µ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
22218µs215µs
# spent 13µs (11+2) within Template::Exception::BEGIN@22 which was called: # once (11µs+2µs) by Template::Service::BEGIN@27 at line 22
use strict;
# spent 13µs making 1 call to Template::Exception::BEGIN@22 # spent 2µs making 1 call to strict::import
23220µs228µs
# spent 16µs (5+12) within Template::Exception::BEGIN@23 which was called: # once (5µs+12µs) by Template::Service::BEGIN@27 at line 23
use warnings;
# spent 16µs making 1 call to Template::Exception::BEGIN@23 # spent 12µs making 1 call to warnings::import
24224µs298µs
# spent 52µs (6+46) within Template::Exception::BEGIN@24 which was called: # once (6µs+46µs) by Template::Service::BEGIN@27 at line 24
use constant TYPE => 0;
# spent 52µs making 1 call to Template::Exception::BEGIN@24 # spent 46µs making 1 call to constant::import
25225µs251µs
# spent 28µs (5+23) within Template::Exception::BEGIN@25 which was called: # once (5µs+23µs) by Template::Service::BEGIN@27 at line 25
use constant INFO => 1;
# spent 28µs making 1 call to Template::Exception::BEGIN@25 # spent 23µs making 1 call to constant::import
26223µs247µs
# spent 25µs (4+21) within Template::Exception::BEGIN@26 which was called: # once (4µs+21µs) by Template::Service::BEGIN@27 at line 26
use constant TEXT => 2;
# spent 25µs making 1 call to Template::Exception::BEGIN@26 # spent 21µs making 1 call to constant::import
272330µs281µs
# spent 45µs (8+37) within Template::Exception::BEGIN@27 which was called: # once (8µs+37µs) by Template::Service::BEGIN@27 at line 27
use overload q|""| => "as_string", fallback => 1;
# spent 45µs making 1 call to Template::Exception::BEGIN@27 # spent 37µ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
14013µs1;
141
142__END__