| Filename | /usr/lib/perl5/Template/Exception.pm |
| Statements | Executed 20 statements in 544µs |
| Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
|---|---|---|---|---|---|
| 1 | 1 | 1 | 21µs | 25µs | Template::Exception::BEGIN@22 |
| 1 | 1 | 1 | 20µs | 80µs | Template::Exception::BEGIN@24 |
| 1 | 1 | 1 | 13µs | 79µs | Template::Exception::BEGIN@27 |
| 1 | 1 | 1 | 10µs | 22µs | Template::Exception::BEGIN@23 |
| 1 | 1 | 1 | 9µs | 41µs | Template::Exception::BEGIN@25 |
| 1 | 1 | 1 | 8µs | 46µs | Template::Exception::BEGIN@26 |
| 0 | 0 | 0 | 0s | 0s | Template::Exception::as_string |
| 0 | 0 | 0 | 0s | 0s | Template::Exception::info |
| 0 | 0 | 0 | 0s | 0s | Template::Exception::new |
| 0 | 0 | 0 | 0s | 0s | Template::Exception::select_handler |
| 0 | 0 | 0 | 0s | 0s | Template::Exception::text |
| 0 | 0 | 0 | 0s | 0s | Template::Exception::type |
| 0 | 0 | 0 | 0s | 0s | Template::Exception::type_info |
| 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 | |||||
| 20 | package Template::Exception; | ||||
| 21 | |||||
| 22 | 3 | 33µs | 2 | 29µs | # spent 25µs (21+4) within Template::Exception::BEGIN@22 which was called:
# once (21µs+4µs) by Template::Service::BEGIN@27 at line 22 # spent 25µs making 1 call to Template::Exception::BEGIN@22
# spent 4µs making 1 call to strict::import |
| 23 | 3 | 27µs | 2 | 34µs | # spent 22µs (10+12) within Template::Exception::BEGIN@23 which was called:
# once (10µs+12µs) by Template::Service::BEGIN@27 at line 23 # spent 22µs making 1 call to Template::Exception::BEGIN@23
# spent 12µs making 1 call to warnings::import |
| 24 | 3 | 40µs | 2 | 141µs | # spent 80µs (20+60) within Template::Exception::BEGIN@24 which was called:
# once (20µs+60µs) by Template::Service::BEGIN@27 at line 24 # spent 80µs making 1 call to Template::Exception::BEGIN@24
# spent 60µs making 1 call to constant::import |
| 25 | 3 | 35µs | 2 | 74µs | # spent 41µs (9+33) within Template::Exception::BEGIN@25 which was called:
# once (9µs+33µs) by Template::Service::BEGIN@27 at line 25 # spent 41µs making 1 call to Template::Exception::BEGIN@25
# spent 33µs making 1 call to constant::import |
| 26 | 3 | 31µs | 2 | 84µs | # spent 46µs (8+38) within Template::Exception::BEGIN@26 which was called:
# once (8µs+38µs) by Template::Service::BEGIN@27 at line 26 # spent 46µs making 1 call to Template::Exception::BEGIN@26
# spent 38µs making 1 call to constant::import |
| 27 | 3 | 374µs | 2 | 144µs | # spent 79µs (13+66) within Template::Exception::BEGIN@27 which was called:
# once (13µs+66µs) by Template::Service::BEGIN@27 at line 27 # spent 79µs making 1 call to Template::Exception::BEGIN@27
# spent 66µs making 1 call to overload::import |
| 28 | |||||
| 29 | 1 | 500ns | our $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 | |||||
| 45 | sub 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 | |||||
| 59 | sub type { | ||||
| 60 | $_[0]->[ TYPE ]; | ||||
| 61 | } | ||||
| 62 | |||||
| 63 | sub info { | ||||
| 64 | $_[0]->[ INFO ]; | ||||
| 65 | } | ||||
| 66 | |||||
| 67 | sub 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 | |||||
| 84 | sub 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 | |||||
| 109 | sub 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 | |||||
| 124 | sub 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 | |||||
| 140 | 1 | 3µs | 1; | ||
| 141 | |||||
| 142 | __END__ |