← Index
NYTProf Performance Profile   « block view • line view • sub view »
For reply.pl
  Run on Thu Oct 21 22:40:13 2010
Reported on Thu Oct 21 22:44:41 2010

Filename/home/hinrik/perl5/perlbrew/perls/perl-5.13.5/lib/site_perl/5.13.5/Hailo/Tokenizer/Words.pm
StatementsExecuted 1768781 statements in 10.3s
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
210000715.75s5.80sHailo::Tokenizer::Words::::CORE:substHailo::Tokenizer::Words::CORE:subst (opcode)
30000114.06s10.4sHailo::Tokenizer::Words::::make_outputHailo::Tokenizer::Words::make_output
7429841484ms484msHailo::Tokenizer::Words::::CORE:substcontHailo::Tokenizer::Words::CORE:substcont (opcode)
1111.98ms26.5msHailo::Tokenizer::Words::::BEGIN@13Hailo::Tokenizer::Words::BEGIN@13
161611.08ms1.08msHailo::Tokenizer::Words::::CORE:regcompHailo::Tokenizer::Words::CORE:regcomp (opcode)
111668µs1.13msHailo::Tokenizer::Words::::BEGIN@14Hailo::Tokenizer::Words::BEGIN@14
111241µs247µsHailo::Tokenizer::Words::::BEGIN@10Hailo::Tokenizer::Words::BEGIN@10
2222146µs46µsHailo::Tokenizer::Words::::CORE:qrHailo::Tokenizer::Words::CORE:qr (opcode)
11146µs125µsHailo::Tokenizer::Words::::BEGIN@9Hailo::Tokenizer::Words::BEGIN@9
11122µs646µsHailo::Tokenizer::Words::::BEGIN@11Hailo::Tokenizer::Words::BEGIN@11
11119µs19µsHailo::Tokenizer::Words::::BEGIN@2Hailo::Tokenizer::Words::BEGIN@2
11114µs1.37msHailo::Tokenizer::Words::::BEGIN@15Hailo::Tokenizer::Words::BEGIN@15
11112µs79µsHailo::Tokenizer::Words::::BEGIN@9.13Hailo::Tokenizer::Words::BEGIN@9.13
11112µs387µsHailo::Tokenizer::Words::::BEGIN@12Hailo::Tokenizer::Words::BEGIN@12
1115µs5µsHailo::Tokenizer::Words::::BEGIN@5Hailo::Tokenizer::Words::BEGIN@5
1112µs2µsHailo::Tokenizer::Words::::spacingHailo::Tokenizer::Words::spacing (xsub)
0000s0sHailo::Tokenizer::Words::::make_tokensHailo::Tokenizer::Words::make_tokens
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package 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
BEGIN {
316µs $Hailo::Tokenizer::Words::AUTHORITY = 'cpan:AVAR';
4124µs119µ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
BEGIN {
616µs $Hailo::Tokenizer::Words::VERSION = '0.57';
7118µs15µs}
# spent 5µs making 1 call to Hailo::Tokenizer::Words::BEGIN@5
8
9474µs3272µs
# spent 125µs (46+79) within Hailo::Tokenizer::Words::BEGIN@9 which was called: # once (46µs+79µs) by Hailo::_new_class at line 9 # spent 79µs (12+67) within Hailo::Tokenizer::Words::BEGIN@9.13 which was called: # once (12µs+67µs) by Hailo::Tokenizer::Words::BEGIN@9 at line 9
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
102265µs2252µ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
use utf8;
# spent 247µs making 1 call to Hailo::Tokenizer::Words::BEGIN@10 # spent 6µs making 1 call to utf8::import
11231µs21.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
use Any::Moose;
# spent 646µs making 1 call to Hailo::Tokenizer::Words::BEGIN@11 # spent 624µs making 1 call to Any::Moose::import
12238µs2762µ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
use Any::Moose 'X::StrictConstructor';
# spent 387µs making 1 call to Hailo::Tokenizer::Words::BEGIN@12 # spent 375µs making 1 call to Any::Moose::import
132167µs250.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
use Regexp::Common qw/ URI /;
# spent 26.5ms making 1 call to Hailo::Tokenizer::Words::BEGIN@13 # spent 24.0ms making 1 call to Regexp::Common::import
142151µs21.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
use Text::Unidecode;
# spent 1.13ms making 1 call to Hailo::Tokenizer::Words::BEGIN@14 # spent 49µs making 1 call to Exporter::import
1521.01ms22.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
use namespace::clean -except => 'meta';
# spent 1.37ms making 1 call to Hailo::Tokenizer::Words::BEGIN@15 # spent 1.36ms making 1 call to namespace::clean::import
16
1714µs110.8mswith qw(Hailo::Role::Arguments
# spent 10.8ms making 1 call to Mouse::with
18 Hailo::Role::Tokenizer);
19
20# tokenization
21111µs14µsmy $DECIMAL = qr/[.,]/;
# spent 4µs making 1 call to Hailo::Tokenizer::Words::CORE:qr
22135µs225µsmy $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
23114µs12µsmy $APOSTROPHE = qr/['’´]/;
# spent 2µs making 1 call to Hailo::Tokenizer::Words::CORE:qr
24128µs220µsmy $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
2516µs12µsmy $TWAT_NAME = qr/ \@ [A-Za-z0-9_]+ /x;
# spent 2µs making 1 call to Hailo::Tokenizer::Words::CORE:qr
2616µs12µsmy $NON_WORD = qr/[^_\d[:alpha:]]+/;
# spent 2µs making 1 call to Hailo::Tokenizer::Words::CORE:qr
2716µs12µsmy $PLAIN_WORD = qr/[_[:alpha:]]+/;
# spent 2µs making 1 call to Hailo::Tokenizer::Words::CORE:qr
28128µs220µsmy $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
29135µs227µsmy $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
30150µs242µsmy $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
3116µs12µsmy $MIXED_CASE = qr/ \p{Lower}+ \p{Upper} /x;
# spent 2µs making 1 call to Hailo::Tokenizer::Words::CORE:qr
3216µs12µsmy $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.
3915µs12µsmy $OPEN_QUOTE = qr/['"‘“„«»「『‹‚]/;
# spent 2µs making 1 call to Hailo::Tokenizer::Words::CORE:qr
4016µs12µsmy $CLOSE_QUOTE = qr/['"’“”«»」』›‘]/;
# spent 2µs making 1 call to Hailo::Tokenizer::Words::CORE:qr
4116µs12µsmy $TERMINATOR = qr/(?:[?!‽]+|(?<!\.)\.)/;
# spent 2µs making 1 call to Hailo::Tokenizer::Words::CORE:qr
4216µs11µsmy $ADDRESS = qr/:/;
# spent 1µs making 1 call to Hailo::Tokenizer::Words::CORE:qr
4315µs12µsmy $PUNCTUATION = qr/[?!‽,;.:]/;
# spent 2µs making 1 call to Hailo::Tokenizer::Words::CORE:qr
44140µs227µsmy $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
45154µs246µsmy $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
46184µs276µsmy $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."
50150µs242µsmy $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
51181µs273µsmy $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
54sub 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
sub make_output {
1653300007.65s my ($self, $tokens) = @_;
166 my $reply = '';
167
168 for my $pos (0 .. $#{ $tokens }) {
16914387372.65s 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
1882457µs86745674ms $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
1911641µs36639354ms $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
19511.86ms407942.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
1961399µs30265111ms $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
1973000058.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
20011.08ms300252.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...
203122µs30003120ms $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
208135µs2138µ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
214Hailo::Tokenizer::Words - A tokenizer for L<Hailo|Hailo> which splits
215on whitespace, mostly.
216
217=head1 DESCRIPTION
218
219This tokenizer does its best to handle various languages. It knows about most
220apostrophes, quotes, and sentence terminators.
221
222=head1 AUTHOR
223
224Hinrik E<Ouml>rn SigurE<eth>sson, hinrik.sig@gmail.com
225
226=head1 LICENSE AND COPYRIGHT
227
228Copyright 2010 Hinrik E<Ouml>rn SigurE<eth>sson
229
230This program is free software, you can redistribute it and/or modify
231it under the same terms as Perl itself.
232
233114µs14.11ms=cut
 
# 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
sub Hailo::Tokenizer::Words::CORE:qr; # opcode
# 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
sub Hailo::Tokenizer::Words::CORE:regcomp; # opcode
# 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
sub Hailo::Tokenizer::Words::CORE:subst; # opcode
# 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
sub Hailo::Tokenizer::Words::CORE:substcont; # opcode
# 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
sub Hailo::Tokenizer::Words::spacing; # xsub