Filename | /home/hinrik/perl5/perlbrew/perls/perl-5.13.5/lib/site_perl/5.13.5/Hailo/Tokenizer/Words.pm |
Statements | Executed 1768781 statements in 10.3s |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
---|---|---|---|---|---|
210000 | 7 | 1 | 5.75s | 5.80s | CORE:subst (opcode) | Hailo::Tokenizer::Words::
30000 | 1 | 1 | 4.06s | 10.4s | make_output | Hailo::Tokenizer::Words::
74298 | 4 | 1 | 484ms | 484ms | CORE:substcont (opcode) | Hailo::Tokenizer::Words::
1 | 1 | 1 | 1.98ms | 26.5ms | BEGIN@13 | Hailo::Tokenizer::Words::
16 | 16 | 1 | 1.08ms | 1.08ms | CORE:regcomp (opcode) | Hailo::Tokenizer::Words::
1 | 1 | 1 | 668µs | 1.13ms | BEGIN@14 | Hailo::Tokenizer::Words::
1 | 1 | 1 | 241µs | 247µs | BEGIN@10 | Hailo::Tokenizer::Words::
22 | 22 | 1 | 46µs | 46µs | CORE:qr (opcode) | Hailo::Tokenizer::Words::
1 | 1 | 1 | 46µs | 125µs | BEGIN@9 | Hailo::Tokenizer::Words::
1 | 1 | 1 | 22µs | 646µs | BEGIN@11 | Hailo::Tokenizer::Words::
1 | 1 | 1 | 19µs | 19µs | BEGIN@2 | Hailo::Tokenizer::Words::
1 | 1 | 1 | 14µs | 1.37ms | BEGIN@15 | Hailo::Tokenizer::Words::
1 | 1 | 1 | 12µs | 79µs | BEGIN@9.13 | Hailo::Tokenizer::Words::
1 | 1 | 1 | 12µs | 387µs | BEGIN@12 | Hailo::Tokenizer::Words::
1 | 1 | 1 | 5µs | 5µs | BEGIN@5 | Hailo::Tokenizer::Words::
1 | 1 | 1 | 2µs | 2µs | spacing (xsub) | Hailo::Tokenizer::Words::
0 | 0 | 0 | 0s | 0s | make_tokens | Hailo::Tokenizer::Words::
Line | State ments |
Time on line |
Calls | Time in subs |
Code |
---|---|---|---|---|---|
1 | package Hailo::Tokenizer::Words; | ||||
2 | # spent 19µs within Hailo::Tokenizer::Words::BEGIN@2 which was called:
# once (19µs+0s) by Hailo::_new_class at line 4 | ||||
3 | 1 | 6µs | $Hailo::Tokenizer::Words::AUTHORITY = 'cpan:AVAR'; | ||
4 | 1 | 24µs | 1 | 19µs | } # spent 19µs making 1 call to Hailo::Tokenizer::Words::BEGIN@2 |
5 | # spent 5µs within Hailo::Tokenizer::Words::BEGIN@5 which was called:
# once (5µs+0s) by Hailo::_new_class at line 7 | ||||
6 | 1 | 6µs | $Hailo::Tokenizer::Words::VERSION = '0.57'; | ||
7 | 1 | 18µs | 1 | 5µs | } # spent 5µs making 1 call to Hailo::Tokenizer::Words::BEGIN@5 |
8 | |||||
9 | 4 | 74µs | 3 | 272µs | use 5.010; # spent 125µs making 1 call to Hailo::Tokenizer::Words::BEGIN@9
# spent 79µs making 1 call to Hailo::Tokenizer::Words::BEGIN@9.13
# spent 67µs making 1 call to feature::import |
10 | 2 | 265µs | 2 | 252µs | # spent 247µs (241+6) within Hailo::Tokenizer::Words::BEGIN@10 which was called:
# once (241µs+6µs) by Hailo::_new_class at line 10 # spent 247µs making 1 call to Hailo::Tokenizer::Words::BEGIN@10
# spent 6µs making 1 call to utf8::import |
11 | 2 | 31µs | 2 | 1.27ms | # spent 646µs (22+624) within Hailo::Tokenizer::Words::BEGIN@11 which was called:
# once (22µs+624µs) by Hailo::_new_class at line 11 # spent 646µs making 1 call to Hailo::Tokenizer::Words::BEGIN@11
# spent 624µs making 1 call to Any::Moose::import |
12 | 2 | 38µs | 2 | 762µs | # spent 387µs (12+375) within Hailo::Tokenizer::Words::BEGIN@12 which was called:
# once (12µs+375µs) by Hailo::_new_class at line 12 # spent 387µs making 1 call to Hailo::Tokenizer::Words::BEGIN@12
# spent 375µs making 1 call to Any::Moose::import |
13 | 2 | 167µs | 2 | 50.5ms | # spent 26.5ms (1.98+24.5) within Hailo::Tokenizer::Words::BEGIN@13 which was called:
# once (1.98ms+24.5ms) by Hailo::_new_class at line 13 # spent 26.5ms making 1 call to Hailo::Tokenizer::Words::BEGIN@13
# spent 24.0ms making 1 call to Regexp::Common::import |
14 | 2 | 151µs | 2 | 1.18ms | # spent 1.13ms (668µs+460µs) within Hailo::Tokenizer::Words::BEGIN@14 which was called:
# once (668µs+460µs) by Hailo::_new_class at line 14 # spent 1.13ms making 1 call to Hailo::Tokenizer::Words::BEGIN@14
# spent 49µs making 1 call to Exporter::import |
15 | 2 | 1.01ms | 2 | 2.73ms | # spent 1.37ms (14µs+1.36) within Hailo::Tokenizer::Words::BEGIN@15 which was called:
# once (14µs+1.36ms) by Hailo::_new_class at line 15 # spent 1.37ms making 1 call to Hailo::Tokenizer::Words::BEGIN@15
# spent 1.36ms making 1 call to namespace::clean::import |
16 | |||||
17 | 1 | 4µs | 1 | 10.8ms | with qw(Hailo::Role::Arguments # spent 10.8ms making 1 call to Mouse::with |
18 | Hailo::Role::Tokenizer); | ||||
19 | |||||
20 | # tokenization | ||||
21 | 1 | 11µs | 1 | 4µs | my $DECIMAL = qr/[.,]/; # spent 4µs making 1 call to Hailo::Tokenizer::Words::CORE:qr |
22 | 1 | 35µs | 2 | 25µs | my $NUMBER = qr/$DECIMAL?\d+(?:$DECIMAL\d+)*/; # spent 23µs making 1 call to Hailo::Tokenizer::Words::CORE:regcomp
# spent 2µs making 1 call to Hailo::Tokenizer::Words::CORE:qr |
23 | 1 | 14µs | 1 | 2µs | my $APOSTROPHE = qr/['’´]/; # spent 2µs making 1 call to Hailo::Tokenizer::Words::CORE:qr |
24 | 1 | 28µs | 2 | 20µs | my $APOST_WORD = qr/[[:alpha:]]+(?:$APOSTROPHE(?:[[:alpha:]]+))+/; # spent 19µs making 1 call to Hailo::Tokenizer::Words::CORE:regcomp
# spent 2µs making 1 call to Hailo::Tokenizer::Words::CORE:qr |
25 | 1 | 6µs | 1 | 2µs | my $TWAT_NAME = qr/ \@ [A-Za-z0-9_]+ /x; # spent 2µs making 1 call to Hailo::Tokenizer::Words::CORE:qr |
26 | 1 | 6µs | 1 | 2µs | my $NON_WORD = qr/[^_\d[:alpha:]]+/; # spent 2µs making 1 call to Hailo::Tokenizer::Words::CORE:qr |
27 | 1 | 6µs | 1 | 2µs | my $PLAIN_WORD = qr/[_[:alpha:]]+/; # spent 2µs making 1 call to Hailo::Tokenizer::Words::CORE:qr |
28 | 1 | 28µs | 2 | 20µs | my $ALPHA_WORD = qr/$APOST_WORD|$PLAIN_WORD/; # spent 18µs making 1 call to Hailo::Tokenizer::Words::CORE:regcomp
# spent 2µs making 1 call to Hailo::Tokenizer::Words::CORE:qr |
29 | 1 | 35µs | 2 | 27µs | my $WORD_TYPES = qr/$NUMBER|$ALPHA_WORD/; # spent 25µs making 1 call to Hailo::Tokenizer::Words::CORE:regcomp
# spent 2µs making 1 call to Hailo::Tokenizer::Words::CORE:qr |
30 | 1 | 50µs | 2 | 42µs | my $WORD = qr/$WORD_TYPES(?:-$WORD_TYPES)*/; # spent 40µs making 1 call to Hailo::Tokenizer::Words::CORE:regcomp
# spent 2µs making 1 call to Hailo::Tokenizer::Words::CORE:qr |
31 | 1 | 6µs | 1 | 2µs | my $MIXED_CASE = qr/ \p{Lower}+ \p{Upper} /x; # spent 2µs making 1 call to Hailo::Tokenizer::Words::CORE:qr |
32 | 1 | 6µs | 1 | 2µs | my $UPPER_NONW = qr/^ \p{Upper}{2,} \W+ \p{Lower}+ $/x; # spent 2µs making 1 call to Hailo::Tokenizer::Words::CORE:qr |
33 | |||||
34 | # capitalization | ||||
35 | # The rest of the regexes are pretty hairy. The goal here is to catch the | ||||
36 | # most common cases where a word should be capitalized. We try hard to | ||||
37 | # guard against capitalizing things which don't look like proper words. | ||||
38 | # Examples include URLs and code snippets. | ||||
39 | 1 | 5µs | 1 | 2µs | my $OPEN_QUOTE = qr/['"‘“„«»「『‹‚]/; # spent 2µs making 1 call to Hailo::Tokenizer::Words::CORE:qr |
40 | 1 | 6µs | 1 | 2µs | my $CLOSE_QUOTE = qr/['"’“”«»」』›‘]/; # spent 2µs making 1 call to Hailo::Tokenizer::Words::CORE:qr |
41 | 1 | 6µs | 1 | 2µs | my $TERMINATOR = qr/(?:[?!‽]+|(?<!\.)\.)/; # spent 2µs making 1 call to Hailo::Tokenizer::Words::CORE:qr |
42 | 1 | 6µs | 1 | 1µs | my $ADDRESS = qr/:/; # spent 1µs making 1 call to Hailo::Tokenizer::Words::CORE:qr |
43 | 1 | 5µs | 1 | 2µs | my $PUNCTUATION = qr/[?!‽,;.:]/; # spent 2µs making 1 call to Hailo::Tokenizer::Words::CORE:qr |
44 | 1 | 40µs | 2 | 27µs | my $BOUNDARY = qr/$CLOSE_QUOTE?(?:\s*$TERMINATOR|$ADDRESS)\s+$OPEN_QUOTE?\s*/; # spent 25µs making 1 call to Hailo::Tokenizer::Words::CORE:regcomp
# spent 2µs making 1 call to Hailo::Tokenizer::Words::CORE:qr |
45 | 1 | 54µs | 2 | 46µs | my $LOOSE_WORD = qr/(?:$NUMBER|$APOST_WORD|\w+)(?:-(?:$NUMBER|$APOST_WORD|\w+))*/; # spent 44µs making 1 call to Hailo::Tokenizer::Words::CORE:regcomp
# spent 2µs making 1 call to Hailo::Tokenizer::Words::CORE:qr |
46 | 1 | 84µs | 2 | 76µs | my $SPLIT_WORD = qr{$LOOSE_WORD(?:/$LOOSE_WORD)?(?=$PUNCTUATION(?: |$)|$CLOSE_QUOTE|$TERMINATOR| |$)}; # spent 74µs making 1 call to Hailo::Tokenizer::Words::CORE:regcomp
# spent 2µs making 1 call to Hailo::Tokenizer::Words::CORE:qr |
47 | |||||
48 | # we want to capitalize words that come after "On example.com?" | ||||
49 | # or "You mean 3.2?", but not "Yes, e.g." | ||||
50 | 1 | 50µs | 2 | 42µs | my $DOTTED_STRICT = qr/$LOOSE_WORD(?:$DECIMAL(?:\d+|\w{2,}))?/; # spent 36µs making 1 call to Hailo::Tokenizer::Words::CORE:regcomp
# spent 5µs making 1 call to Hailo::Tokenizer::Words::CORE:qr |
51 | 1 | 81µs | 2 | 73µs | my $WORD_STRICT = qr/$DOTTED_STRICT(?:$APOSTROPHE$DOTTED_STRICT)*/; # spent 72µs making 1 call to Hailo::Tokenizer::Words::CORE:regcomp
# spent 2µs making 1 call to Hailo::Tokenizer::Words::CORE:qr |
52 | |||||
53 | # input -> tokens | ||||
54 | sub make_tokens { | ||||
55 | my ($self, $line) = @_; | ||||
56 | |||||
57 | my @tokens; | ||||
58 | my @chunks = split /\s+/, $line; | ||||
59 | |||||
60 | # process all whitespace-delimited chunks | ||||
61 | for my $chunk (@chunks) { | ||||
62 | my $got_word; | ||||
63 | |||||
64 | while (length $chunk) { | ||||
65 | # We convert it to ASCII and then look for a URI because $RE{URI} | ||||
66 | # from Regexp::Common doesn't support non-ASCII domain names | ||||
67 | my $ascii = $chunk; | ||||
68 | $ascii =~ s/[^[:ascii:]]/a/g; | ||||
69 | |||||
70 | # URIs | ||||
71 | if ($ascii =~ / ^ $RE{URI} /xo) { | ||||
72 | my $uri_end = $+[0]; | ||||
73 | my $uri = substr $chunk, 0, $uri_end; | ||||
74 | $chunk =~ s/^\Q$uri//; | ||||
75 | |||||
76 | push @tokens, [$self->{_spacing_normal}, $uri]; | ||||
77 | $got_word = 1; | ||||
78 | } | ||||
79 | # ssh:// (and foo+ssh://) URIs | ||||
80 | elsif ($chunk =~ s{ ^ (?<uri> (?:\w+\+) ssh:// \S+ ) }{}xo) { | ||||
81 | push @tokens, [$self->{_spacing_normal}, $+{uri}]; | ||||
82 | $got_word = 1; | ||||
83 | } | ||||
84 | # Twitter names | ||||
85 | elsif ($chunk =~ s/ ^ (?<twat> $TWAT_NAME ) //xo) { | ||||
86 | # Names on Twitter/Identi.ca can only match | ||||
87 | # @[A-Za-z0-9_]+. I tested this on ~800k Twatterhose | ||||
88 | # names. | ||||
89 | push @tokens, [$self->{_spacing_normal}, $+{twat}]; | ||||
90 | $got_word = 1; | ||||
91 | } | ||||
92 | # normal words | ||||
93 | elsif ($chunk =~ / ^ $WORD /xo) { | ||||
94 | # there's probably a simpler way to accomplish this | ||||
95 | my @words; | ||||
96 | while (1) { | ||||
97 | last if $chunk !~ s/^($WORD)//o; | ||||
98 | push @words, $1; | ||||
99 | } | ||||
100 | |||||
101 | for my $word (@words) { | ||||
102 | # Maybe preserve the casing of this word | ||||
103 | $word = lc $word | ||||
104 | if $word ne uc $word | ||||
105 | # Mixed-case words like "WoW" | ||||
106 | and $word !~ $MIXED_CASE | ||||
107 | # Words that are upper case followed by a non-word character. | ||||
108 | # {2,} so it doesn't match I'm | ||||
109 | and $word !~ $UPPER_NONW; | ||||
110 | } | ||||
111 | |||||
112 | if (@words == 1) { | ||||
113 | push @tokens, [$self->{_spacing_normal}, $words[0]]; | ||||
114 | } | ||||
115 | elsif (@words == 2) { | ||||
116 | # When there are two words joined together, we need to | ||||
117 | # decide if it's normal+postfix (e.g. "4.1GB") or | ||||
118 | # prefix+normal (e.g. "v2.3") | ||||
119 | |||||
120 | if ($words[0] =~ /$NUMBER/ && $words[1] =~ /$ALPHA_WORD/) { | ||||
121 | push @tokens, [$self->{_spacing_normal}, $words[0]]; | ||||
122 | push @tokens, [$self->{_spacing_postfix}, $words[1]]; | ||||
123 | } | ||||
124 | elsif ($words[0] =~ /$ALPHA_WORD/ && $words[1] =~ /$NUMBER/) { | ||||
125 | push @tokens, [$self->{_spacing_prefix}, $words[0]]; | ||||
126 | push @tokens, [$self->{_spacing_normal}, $words[1]]; | ||||
127 | } | ||||
128 | } | ||||
129 | else { | ||||
130 | # When 3 or more words are together, (e.g. "800x600"), | ||||
131 | # we treat them as two normal tokens surrounding one or | ||||
132 | # more infix tokens | ||||
133 | push @tokens, [$self->{_spacing_normal}, $_] for $words[0]; | ||||
134 | push @tokens, [$self->{_spacing_infix}, $_] for @words[1..$#words-1]; | ||||
135 | push @tokens, [$self->{_spacing_normal}, $_] for $words[-1]; | ||||
136 | } | ||||
137 | |||||
138 | $got_word = 1; | ||||
139 | } | ||||
140 | # everything else | ||||
141 | elsif ($chunk =~ s/ ^ (?<non_word> $NON_WORD ) //xo) { | ||||
142 | my $non_word = $+{non_word}; | ||||
143 | my $spacing = $self->{_spacing_normal}; | ||||
144 | |||||
145 | # was the previous token a word? | ||||
146 | if ($got_word) { | ||||
147 | $spacing = length $chunk | ||||
148 | ? $self->{_spacing_infix} | ||||
149 | : $self->{_spacing_postfix}; | ||||
150 | } | ||||
151 | # do we still have more tokens in this chunk? | ||||
152 | elsif (length $chunk) { | ||||
153 | $spacing = $self->{_spacing_prefix}; | ||||
154 | } | ||||
155 | |||||
156 | push @tokens, [$spacing, $non_word]; | ||||
157 | } | ||||
158 | } | ||||
159 | } | ||||
160 | return \@tokens; | ||||
161 | } | ||||
162 | |||||
163 | # tokens -> output | ||||
164 | # spent 10.4s (4.06+6.32) within Hailo::Tokenizer::Words::make_output which was called 30000 times, avg 346µs/call:
# 30000 times (4.06s+6.32s) by Hailo::reply at line 329 of Hailo.pm, avg 346µs/call | ||||
165 | 1768737 | 10.3s | my ($self, $tokens) = @_; | ||
166 | my $reply = ''; | ||||
167 | |||||
168 | for my $pos (0 .. $#{ $tokens }) { | ||||
169 | my ($spacing, $text) = @{ $tokens->[$pos] }; | ||||
170 | $reply .= $text; | ||||
171 | |||||
172 | # append whitespace if this is not a prefix token or infix token, | ||||
173 | # and this is not the last token, and the next token is not | ||||
174 | # a postfix/infix token | ||||
175 | if ($pos != $#{ $tokens } | ||||
176 | && $spacing != $self->{_spacing_prefix} | ||||
177 | && $spacing != $self->{_spacing_infix} | ||||
178 | && !($pos < $#{ $tokens } | ||||
179 | && ($tokens->[$pos+1][0] == $self->{_spacing_postfix} | ||||
180 | || $tokens->[$pos+1][0] == $self->{_spacing_infix}) | ||||
181 | ) | ||||
182 | ) { | ||||
183 | $reply .= ' '; | ||||
184 | } | ||||
185 | } | ||||
186 | |||||
187 | # capitalize the first word | ||||
188 | 2 | 457µs | 86745 | 674ms | $reply =~ s/^\s*$OPEN_QUOTE?\s*\K($SPLIT_WORD)(?=(?:$TERMINATOR+|$ADDRESS|$PUNCTUATION+)?\b)/\u$1/o; # spent 488ms making 30000 calls to Hailo::Tokenizer::Words::CORE:subst, avg 16µs/call
# spent 127ms making 56716 calls to Hailo::Tokenizer::Words::CORE:substcont, avg 2µs/call
# spent 56.8ms making 27 calls to utf8::SWASHNEW, avg 2.10ms/call
# spent 2.14ms making 1 call to utf8::AUTOLOAD
# spent 114µs making 1 call to Hailo::Tokenizer::Words::CORE:regcomp |
189 | |||||
190 | # capitalize the second word | ||||
191 | 1 | 641µs | 36639 | 354ms | $reply =~ s/^\s*$OPEN_QUOTE?\s*$SPLIT_WORD(?:(?:\s*$TERMINATOR|$ADDRESS)\s+)\K($SPLIT_WORD)/\u$1/o; # spent 337ms making 30000 calls to Hailo::Tokenizer::Words::CORE:subst, avg 11µs/call
# spent 10.3ms making 6596 calls to Hailo::Tokenizer::Words::CORE:substcont, avg 2µs/call
# spent 6.65ms making 42 calls to utf8::SWASHNEW, avg 158µs/call
# spent 175µs making 1 call to Hailo::Tokenizer::Words::CORE:regcomp |
192 | |||||
193 | # capitalize all other words after word boundaries | ||||
194 | # we do it in two passes because we need to match two words at a time | ||||
195 | 1 | 1.86ms | 40794 | 2.69s | $reply =~ s/ $OPEN_QUOTE?\s*$WORD_STRICT$BOUNDARY\K($SPLIT_WORD)/\x1B\u$1\x1B/go; # spent 2.34s making 30000 calls to Hailo::Tokenizer::Words::CORE:subst, avg 78µs/call
# spent 346ms making 10752 calls to Hailo::Tokenizer::Words::CORE:substcont, avg 32µs/call
# spent 6.90ms making 41 calls to utf8::SWASHNEW, avg 168µs/call
# spent 152µs making 1 call to Hailo::Tokenizer::Words::CORE:regcomp |
196 | 1 | 399µs | 30265 | 111ms | $reply =~ s/\x1B$WORD_STRICT\x1B$BOUNDARY\K($SPLIT_WORD)/\u$1/go; # spent 106ms making 30000 calls to Hailo::Tokenizer::Words::CORE:subst, avg 4µs/call
# spent 4.72ms making 30 calls to utf8::SWASHNEW, avg 157µs/call
# spent 617µs making 234 calls to Hailo::Tokenizer::Words::CORE:substcont, avg 3µs/call
# spent 154µs making 1 call to Hailo::Tokenizer::Words::CORE:regcomp |
197 | 30000 | 58.1ms | $reply =~ s/\x1B//go; # spent 58.1ms making 30000 calls to Hailo::Tokenizer::Words::CORE:subst, avg 2µs/call | ||
198 | |||||
199 | # end paragraphs with a period when it makes sense | ||||
200 | 1 | 1.08ms | 30025 | 2.36s | $reply =~ s/(?: |^)$OPEN_QUOTE?$SPLIT_WORD$CLOSE_QUOTE?\K$/./o; # spent 2.35s making 30000 calls to Hailo::Tokenizer::Words::CORE:subst, avg 78µs/call
# spent 3.96ms making 24 calls to utf8::SWASHNEW, avg 165µs/call
# spent 84µs making 1 call to Hailo::Tokenizer::Words::CORE:regcomp |
201 | |||||
202 | # capitalize I'm, I've... | ||||
203 | 1 | 22µs | 30003 | 120ms | $reply =~ s{(?: |$OPEN_QUOTE)\Ki(?=$APOSTROPHE(?:[[:alpha:]]))}{I}go; # spent 120ms making 30000 calls to Hailo::Tokenizer::Words::CORE:subst, avg 4µs/call
# spent 403µs making 2 calls to utf8::SWASHNEW, avg 202µs/call
# spent 26µs making 1 call to Hailo::Tokenizer::Words::CORE:regcomp |
204 | |||||
205 | return $reply; | ||||
206 | } | ||||
207 | |||||
208 | 1 | 35µs | 2 | 138µs | __PACKAGE__->meta->make_immutable; # spent 122µs making 1 call to Mouse::Meta::Class::make_immutable
# spent 16µs making 1 call to Hailo::Tokenizer::Words::meta |
209 | |||||
210 | =encoding utf8 | ||||
211 | |||||
212 | =head1 NAME | ||||
213 | |||||
214 | Hailo::Tokenizer::Words - A tokenizer for L<Hailo|Hailo> which splits | ||||
215 | on whitespace, mostly. | ||||
216 | |||||
217 | =head1 DESCRIPTION | ||||
218 | |||||
219 | This tokenizer does its best to handle various languages. It knows about most | ||||
220 | apostrophes, quotes, and sentence terminators. | ||||
221 | |||||
222 | =head1 AUTHOR | ||||
223 | |||||
224 | Hinrik E<Ouml>rn SigurE<eth>sson, hinrik.sig@gmail.com | ||||
225 | |||||
226 | =head1 LICENSE AND COPYRIGHT | ||||
227 | |||||
228 | Copyright 2010 Hinrik E<Ouml>rn SigurE<eth>sson | ||||
229 | |||||
230 | This program is free software, you can redistribute it and/or modify | ||||
231 | it under the same terms as Perl itself. | ||||
232 | |||||
233 | 1 | 14µs | 1 | 4.11ms | =cut # spent 4.11ms making 1 call to B::Hooks::EndOfScope::__ANON__[B/Hooks/EndOfScope.pm:26] |
# spent 46µs within Hailo::Tokenizer::Words::CORE:qr which was called 22 times, avg 2µs/call:
# once (5µs+0s) by Hailo::_new_class at line 50
# once (4µs+0s) by Hailo::_new_class at line 21
# once (2µs+0s) by Hailo::_new_class at line 45
# once (2µs+0s) by Hailo::_new_class at line 23
# once (2µs+0s) by Hailo::_new_class at line 32
# once (2µs+0s) by Hailo::_new_class at line 46
# once (2µs+0s) by Hailo::_new_class at line 25
# once (2µs+0s) by Hailo::_new_class at line 30
# once (2µs+0s) by Hailo::_new_class at line 28
# once (2µs+0s) by Hailo::_new_class at line 29
# once (2µs+0s) by Hailo::_new_class at line 26
# once (2µs+0s) by Hailo::_new_class at line 22
# once (2µs+0s) by Hailo::_new_class at line 27
# once (2µs+0s) by Hailo::_new_class at line 40
# once (2µs+0s) by Hailo::_new_class at line 51
# once (2µs+0s) by Hailo::_new_class at line 31
# once (2µs+0s) by Hailo::_new_class at line 41
# once (2µs+0s) by Hailo::_new_class at line 43
# once (2µs+0s) by Hailo::_new_class at line 44
# once (2µs+0s) by Hailo::_new_class at line 24
# once (2µs+0s) by Hailo::_new_class at line 39
# once (1µs+0s) by Hailo::_new_class at line 42 | |||||
# spent 1.08ms within Hailo::Tokenizer::Words::CORE:regcomp which was called 16 times, avg 68µs/call:
# once (175µs+0s) by Hailo::Tokenizer::Words::make_output at line 191
# once (154µs+0s) by Hailo::Tokenizer::Words::make_output at line 196
# once (152µs+0s) by Hailo::Tokenizer::Words::make_output at line 195
# once (114µs+0s) by Hailo::Tokenizer::Words::make_output at line 188
# once (84µs+0s) by Hailo::Tokenizer::Words::make_output at line 200
# once (74µs+0s) by Hailo::_new_class at line 46
# once (72µs+0s) by Hailo::_new_class at line 51
# once (44µs+0s) by Hailo::_new_class at line 45
# once (40µs+0s) by Hailo::_new_class at line 30
# once (36µs+0s) by Hailo::_new_class at line 50
# once (26µs+0s) by Hailo::Tokenizer::Words::make_output at line 203
# once (25µs+0s) by Hailo::_new_class at line 44
# once (25µs+0s) by Hailo::_new_class at line 29
# once (23µs+0s) by Hailo::_new_class at line 22
# once (19µs+0s) by Hailo::_new_class at line 24
# once (18µs+0s) by Hailo::_new_class at line 28 | |||||
# spent 5.80s (5.75+55.9ms) within Hailo::Tokenizer::Words::CORE:subst which was called 210000 times, avg 28µs/call:
# 30000 times (2.35s+3.96ms) by Hailo::Tokenizer::Words::make_output at line 200, avg 78µs/call
# 30000 times (2.33s+6.65ms) by Hailo::Tokenizer::Words::make_output at line 195, avg 78µs/call
# 30000 times (455ms+33.5ms) by Hailo::Tokenizer::Words::make_output at line 188, avg 16µs/call
# 30000 times (331ms+6.65ms) by Hailo::Tokenizer::Words::make_output at line 191, avg 11µs/call
# 30000 times (119ms+403µs) by Hailo::Tokenizer::Words::make_output at line 203, avg 4µs/call
# 30000 times (101ms+4.72ms) by Hailo::Tokenizer::Words::make_output at line 196, avg 4µs/call
# 30000 times (58.1ms+0s) by Hailo::Tokenizer::Words::make_output at line 197, avg 2µs/call | |||||
# spent 484ms (484+247µs) within Hailo::Tokenizer::Words::CORE:substcont which was called 74298 times, avg 7µs/call:
# 56716 times (127ms+0s) by Hailo::Tokenizer::Words::make_output at line 188, avg 2µs/call
# 10752 times (346ms+247µs) by Hailo::Tokenizer::Words::make_output at line 195, avg 32µs/call
# 6596 times (10.3ms+0s) by Hailo::Tokenizer::Words::make_output at line 191, avg 2µs/call
# 234 times (617µs+0s) by Hailo::Tokenizer::Words::make_output at line 196, avg 3µs/call | |||||
# spent 2µs within Hailo::Tokenizer::Words::spacing which was called:
# once (2µs+0s) by Hailo::Role::Tokenizer::BUILD at line 32 of Hailo/Role/Tokenizer.pm |