← Index
NYTProf Performance Profile   « line view »
For flows_to_es.pl
  Run on Mon May 9 23:27:59 2016
Reported on Mon May 9 23:28:09 2016

Filename/usr/share/perl5/URI.pm
StatementsExecuted 108 statements in 2.58ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
2114.20ms4.46msURI::::implementorURI::implementor
1111.01ms1.04msURI::::BEGIN@22URI::BEGIN@22
111101µs117µsURI::::_schemeURI::_scheme
95171µs71µsURI::::CORE:regcompURI::CORE:regcomp (opcode)
22150µs7.54msURI::::newURI::new
21130µs54µsURI::::_uric_escapeURI::_uric_escape
21124µs3.00msURI::::_initURI::_init
11115µs67µsURI::::BEGIN@24URI::BEGIN@24
62213µs13µsURI::::__ANON__[:24]URI::__ANON__[:24]
74113µs13µsURI::::CORE:matchURI::CORE:match (opcode)
11112µs26µsURI::::BEGIN@3URI::BEGIN@3
2119µs9µsURI::::cloneURI::clone
1119µs38µsURI::::BEGIN@4URI::BEGIN@4
1119µs22µsURI::::BEGIN@128URI::BEGIN@128
1119µs126µsURI::::schemeURI::scheme
13819µs9µsURI::::CORE:substURI::CORE:subst (opcode)
1118µs71µsURI::::BEGIN@13URI::BEGIN@13
1118µs46µsURI::::BEGIN@7URI::BEGIN@7
1114µs4µsURI::::BEGIN@21URI::BEGIN@21
1112µs2µsURI::::_init_implementorURI::_init_implementor
0000s0sURI::::STORABLE_freezeURI::STORABLE_freeze
0000s0sURI::::STORABLE_thawURI::STORABLE_thaw
0000s0sURI::::__ANON__[:25]URI::__ANON__[:25]
0000s0sURI::::__ANON__[:26]URI::__ANON__[:26]
0000s0sURI::::_no_scheme_okURI::_no_scheme_ok
0000s0sURI::::_obj_eqURI::_obj_eq
0000s0sURI::::absURI::abs
0000s0sURI::::as_iriURI::as_iri
0000s0sURI::::as_stringURI::as_string
0000s0sURI::::canonicalURI::canonical
0000s0sURI::::eqURI::eq
0000s0sURI::::fragmentURI::fragment
0000s0sURI::::new_absURI::new_abs
0000s0sURI::::opaqueURI::opaque
0000s0sURI::::relURI::rel
0000s0sURI::::secureURI::secure
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package URI;
2
3234µs240µs
# spent 26µs (12+14) within URI::BEGIN@3 which was called: # once (12µs+14µs) by Search::Elasticsearch::Role::Logger::BEGIN@5 at line 3
use strict;
# spent 26µs making 1 call to URI::BEGIN@3 # spent 14µs making 1 call to strict::import
4241µs266µs
# spent 38µs (9+29) within URI::BEGIN@4 which was called: # once (9µs+29µs) by Search::Elasticsearch::Role::Logger::BEGIN@5 at line 4
use vars qw($VERSION);
# spent 38µs making 1 call to URI::BEGIN@4 # spent 29µs making 1 call to vars::import
51700ns$VERSION = "1.60";
6
7242µs285µs
# spent 46µs (8+38) within URI::BEGIN@7 which was called: # once (8µs+38µs) by Search::Elasticsearch::Role::Logger::BEGIN@5 at line 7
use vars qw($ABS_REMOTE_LEADING_DOTS $ABS_ALLOW_RELATIVE_SCHEME $DEFAULT_QUERY_FORM_DELIMITER);
# spent 46µs making 1 call to URI::BEGIN@7 # spent 38µs making 1 call to vars::import
8
91200nsmy %implements; # mapping from scheme to implementor class
10
11# Some "official" character classes
12
13273µs2134µs
# spent 71µs (8+63) within URI::BEGIN@13 which was called: # once (8µs+63µs) by Search::Elasticsearch::Role::Logger::BEGIN@5 at line 13
use vars qw($reserved $mark $unreserved $uric $scheme_re);
# spent 71µs making 1 call to URI::BEGIN@13 # spent 63µs making 1 call to vars::import
141200ns$reserved = q(;/?:@&=+$,[]);
151200ns$mark = q(-_.!~*'()); #'; emacs
1611µs$unreserved = "A-Za-z0-9\Q$mark\E";
171800ns$uric = quotemeta($reserved) . $unreserved . "%";
18
191200ns$scheme_re = '[a-zA-Z][a-zA-Z0-9.+\-]*';
20
21224µs14µs
# spent 4µs within URI::BEGIN@21 which was called: # once (4µs+0s) by Search::Elasticsearch::Role::Logger::BEGIN@5 at line 21
use Carp ();
# spent 4µs making 1 call to URI::BEGIN@21
222186µs11.04ms
# spent 1.04ms (1.01+33µs) within URI::BEGIN@22 which was called: # once (1.01ms+33µs) by Search::Elasticsearch::Role::Logger::BEGIN@5 at line 22
use URI::Escape ();
# spent 1.04ms making 1 call to URI::BEGIN@22
23
24621µs
# spent 13µs within URI::__ANON__[/usr/share/perl5/URI.pm:24] which was called 6 times, avg 2µs/call: # 4 times (9µs+0s) by Search::Elasticsearch::Role::Cxn::HTTP::stringify at line 21 of /opt/flows/lib/lib/perl5/Search/Elasticsearch/Role/Cxn/HTTP.pm, avg 2µs/call # 2 times (4µs+0s) by Search::Elasticsearch::Cxn::HTTPTiny::perform_request at line 34 of /opt/flows/lib/lib/perl5/Search/Elasticsearch/Cxn/HTTPTiny.pm, avg 2µs/call # spent 67µs (15+52) within URI::BEGIN@24 which was called: # once (15µs+52µs) by Search::Elasticsearch::Role::Logger::BEGIN@5 at line 28
use overload ('""' => sub { ${$_[0]} },
25 '==' => sub { _obj_eq(@_) },
26 '!=' => sub { !_obj_eq(@_) },
27114µs152µs fallback => 1,
# spent 52µs making 1 call to overload::import
281562µs167µs );
# spent 67µs making 1 call to URI::BEGIN@24
29
30# Check if two objects are the same object
31sub _obj_eq {
32 return overload::StrVal($_[0]) eq overload::StrVal($_[1]);
33}
34
35sub new
36
# spent 7.54ms (50µs+7.49) within URI::new which was called 2 times, avg 3.77ms/call: # once (34µs+7.38ms) by Search::Elasticsearch::Role::Cxn::HTTP::BUILDARGS at line 39 of /opt/flows/lib/lib/perl5/Search/Elasticsearch/Role/Cxn/HTTP.pm # once (17µs+108µs) by Search::Elasticsearch::Role::Cxn::HTTP::BUILDARGS at line 80 of /opt/flows/lib/lib/perl5/Search/Elasticsearch/Role/Cxn/HTTP.pm
{
3721µs my($class, $uri, $scheme) = @_;
38
3921µs $uri = defined ($uri) ? "$uri" : ""; # stringify
40 # Get rid of potential wrapping
4127µs21µs $uri =~ s/^<(?:URL:)?(.*)>$/$1/; #
# spent 1µs making 2 calls to URI::CORE:subst, avg 550ns/call
4224µs2600ns $uri =~ s/^"(.*)"$/$1/;
# spent 600ns making 2 calls to URI::CORE:subst, avg 300ns/call
4326µs22µs $uri =~ s/^\s+//;
# spent 2µs making 2 calls to URI::CORE:subst, avg 1µs/call
4425µs22µs $uri =~ s/\s+$//;
# spent 2µs making 2 calls to URI::CORE:subst, avg 750ns/call
45
462300ns my $impclass;
47235µs420µs if ($uri =~ m/^($scheme_re):/so) {
# spent 16µs making 2 calls to URI::CORE:regcomp, avg 8µs/call # spent 4µs making 2 calls to URI::CORE:match, avg 2µs/call
48 $scheme = $1;
49 }
50 else {
51 if (($impclass = ref($scheme))) {
52 $scheme = $scheme->scheme;
53 }
54 elsif ($scheme && $scheme =~ m/^($scheme_re)(?::|$)/o) {
55 $scheme = $1;
56 }
57 }
58 $impclass ||= implementor($scheme) ||
5924µs24.46ms do {
# spent 4.46ms making 2 calls to URI::implementor, avg 2.23ms/call
60 require URI::_foreign;
61 $impclass = 'URI::_foreign';
62 };
63
64212µs23.00ms return $impclass->_init($uri, $scheme);
# spent 3.00ms making 2 calls to URI::_init, avg 1.50ms/call
65}
66
67
68sub new_abs
69{
70 my($class, $uri, $base) = @_;
71 $uri = $class->new($uri, $base);
72 $uri->abs($base);
73}
74
75
76sub _init
77
# spent 3.00ms (24µs+2.98) within URI::_init which was called 2 times, avg 1.50ms/call: # 2 times (24µs+2.98ms) by URI::new at line 64, avg 1.50ms/call
{
782700ns my $class = shift;
7921µs my($str, $scheme) = @_;
80 # find all funny characters and encode the bytes.
8124µs22.97ms $str = $class->_uric_escape($str);
# spent 2.97ms making 2 calls to URI::_server::_uric_escape, avg 1.48ms/call
82225µs415µs $str = "$scheme:$str" unless $str =~ /^$scheme_re:/o ||
# spent 11µs making 2 calls to URI::CORE:regcomp, avg 6µs/call # spent 4µs making 2 calls to URI::CORE:match, avg 2µs/call
83 $class->_no_scheme_ok;
8423µs my $self = bless \$str, $class;
8526µs $self;
86}
87
88
89sub _uric_escape
90
# spent 54µs (30+24) within URI::_uric_escape which was called 2 times, avg 27µs/call: # 2 times (30µs+24µs) by URI::_server::_uric_escape at line 18 of URI/_server.pm, avg 27µs/call
{
9121µs my($class, $str) = @_;
92231µs422µs $str =~ s*([^$uric\#])* URI::Escape::escape_char($1) *ego;
# spent 20µs making 2 calls to URI::CORE:regcomp, avg 10µs/call # spent 2µs making 2 calls to URI::CORE:subst, avg 1µs/call
93218µs22µs utf8::downgrade($str);
# spent 2µs making 2 calls to utf8::downgrade, avg 1µs/call
9426µs return $str;
95}
96
97
98sub implementor
99
# spent 4.46ms (4.20+260µs) within URI::implementor which was called 2 times, avg 2.23ms/call: # 2 times (4.20ms+260µs) by URI::new at line 59, avg 2.23ms/call
{
10021µs my($scheme, $impclass) = @_;
101221µs412µs if (!$scheme || $scheme !~ /\A$scheme_re\z/o) {
# spent 10µs making 2 calls to URI::CORE:regcomp, avg 5µs/call # spent 2µs making 2 calls to URI::CORE:match, avg 1µs/call
102 require URI::_generic;
103 return "URI::_generic";
104 }
105
10621µs $scheme = lc($scheme);
107
1082200ns if ($impclass) {
109 # Set the implementor class for a given scheme
110 my $old = $implements{$scheme};
111 $impclass->_init_implementor($scheme);
112 $implements{$scheme} = $impclass;
113 return $old;
114 }
115
11621µs my $ic = $implements{$scheme};
11723µs return $ic if $ic;
118
119 # scheme not yet known, look for internal or
120 # preloaded (with 'use') implementation
1211400ns $ic = "URI::$scheme"; # default location
122
123 # turn scheme into a valid perl identifier by a simple transformation...
12413µs1500ns $ic =~ s/\+/_P/g;
# spent 500ns making 1 call to URI::CORE:subst
12513µs1200ns $ic =~ s/\./_O/g;
# spent 200ns making 1 call to URI::CORE:subst
12613µs1200ns $ic =~ s/\-/_/g;
# spent 200ns making 1 call to URI::CORE:subst
127
12821.18ms235µs
# spent 22µs (9+13) within URI::BEGIN@128 which was called: # once (9µs+13µs) by Search::Elasticsearch::Role::Logger::BEGIN@5 at line 128
no strict 'refs';
# spent 22µs making 1 call to URI::BEGIN@128 # spent 13µs making 1 call to strict::unimport
129 # check we actually have one for the scheme:
13015µs unless (@{"${ic}::ISA"}) {
131 # Try to load it
132122µs eval "require $ic";
# spent 93µs executing statements in string eval
1331200ns die $@ if $@ && $@ !~ /Can\'t locate.*in \@INC/;
13412µs return unless @{"${ic}::ISA"};
135 }
136
13716µs12µs $ic->_init_implementor($scheme);
# spent 2µs making 1 call to URI::_init_implementor
1381700ns $implements{$scheme} = $ic;
13914µs $ic;
140}
141
142
143sub _init_implementor
144
# spent 2µs within URI::_init_implementor which was called: # once (2µs+0s) by URI::implementor at line 137
{
14515µs my($class, $scheme) = @_;
146 # Remember that one implementor class may actually
147 # serve to implement several URI schemes.
148}
149
150
151sub clone
152
# spent 9µs within URI::clone which was called 2 times, avg 5µs/call: # 2 times (9µs+0s) by Search::Elasticsearch::Role::Cxn::HTTP::build_uri at line 91 of /opt/flows/lib/lib/perl5/Search/Elasticsearch/Role/Cxn/HTTP.pm, avg 5µs/call
{
15321µs my $self = shift;
15422µs my $other = $$self;
15529µs bless \$other, ref $self;
156}
157
158
159sub _no_scheme_ok { 0 }
160
161sub _scheme
162
# spent 117µs (101+16) within URI::_scheme which was called: # once (101µs+16µs) by URI::scheme at line 195
{
1631200ns my $self = shift;
164
1651500ns unless (@_) {
1661113µs216µs return unless $$self =~ /^($scheme_re):/o;
# spent 14µs making 1 call to URI::CORE:regcomp # spent 2µs making 1 call to URI::CORE:match
16715µs return $1;
168 }
169
170 my $old;
171 my $new = shift;
172 if (defined($new) && length($new)) {
173 Carp::croak("Bad scheme '$new'") unless $new =~ /^$scheme_re$/o;
174 $old = $1 if $$self =~ s/^($scheme_re)://o;
175 my $newself = URI->new("$new:$$self");
176 $$self = $$newself;
177 bless $self, ref($newself);
178 }
179 else {
180 if ($self->_no_scheme_ok) {
181 $old = $1 if $$self =~ s/^($scheme_re)://o;
182 Carp::carp("Oops, opaque part now look like scheme")
183 if $^W && $$self =~ m/^$scheme_re:/o
184 }
185 else {
186 $old = $1 if $$self =~ m/^($scheme_re):/o;
187 }
188 }
189
190 return $old;
191}
192
193sub scheme
194
# spent 126µs (9+117) within URI::scheme which was called: # once (9µs+117µs) by Search::Elasticsearch::Role::Cxn::HTTP::BUILDARGS at line 40 of /opt/flows/lib/lib/perl5/Search/Elasticsearch/Role/Cxn/HTTP.pm
{
19514µs1117µs my $scheme = shift->_scheme(@_);
# spent 117µs making 1 call to URI::_scheme
1961400ns return unless defined $scheme;
19714µs lc($scheme);
198}
199
200
201sub opaque
202{
203 my $self = shift;
204
205 unless (@_) {
206 $$self =~ /^(?:$scheme_re:)?([^\#]*)/o or die;
207 return $1;
208 }
209
210 $$self =~ /^($scheme_re:)? # optional scheme
211 ([^\#]*) # opaque
212 (\#.*)? # optional fragment
213 $/sx or die;
214
215 my $old_scheme = $1;
216 my $old_opaque = $2;
217 my $old_frag = $3;
218
219 my $new_opaque = shift;
220 $new_opaque = "" unless defined $new_opaque;
221 $new_opaque =~ s/([^$uric])/ URI::Escape::escape_char($1)/ego;
222 utf8::downgrade($new_opaque);
223
224 $$self = defined($old_scheme) ? $old_scheme : "";
225 $$self .= $new_opaque;
226 $$self .= $old_frag if defined $old_frag;
227
228 $old_opaque;
229}
230
23112µs*path = \&opaque; # alias
232
233
234sub fragment
235{
236 my $self = shift;
237 unless (@_) {
238 return unless $$self =~ /\#(.*)/s;
239 return $1;
240 }
241
242 my $old;
243 $old = $1 if $$self =~ s/\#(.*)//s;
244
245 my $new_frag = shift;
246 if (defined $new_frag) {
247 $new_frag =~ s/([^$uric])/ URI::Escape::escape_char($1) /ego;
248 utf8::downgrade($new_frag);
249 $$self .= "#$new_frag";
250 }
251 $old;
252}
253
254
255sub as_string
256{
257 my $self = shift;
258 $$self;
259}
260
261
262sub as_iri
263{
264 my $self = shift;
265 my $str = $$self;
266 if ($str =~ s/%([89a-fA-F][0-9a-fA-F])/chr(hex($1))/eg) {
267 # All this crap because the more obvious:
268 #
269 # Encode::decode("UTF-8", $str, sub { sprintf "%%%02X", shift })
270 #
271 # doesn't work before Encode 2.39. Wait for a standard release
272 # to bundle that version.
273
274 require Encode;
275 my $enc = Encode::find_encoding("UTF-8");
276 my $u = "";
277 while (length $str) {
278 $u .= $enc->decode($str, Encode::FB_QUIET());
279 if (length $str) {
280 # escape next char
281 $u .= URI::Escape::escape_char(substr($str, 0, 1, ""));
282 }
283 }
284 $str = $u;
285 }
286 return $str;
287}
288
289
290sub canonical
291{
292 # Make sure scheme is lowercased, that we don't escape unreserved chars,
293 # and that we use upcase escape sequences.
294
295 my $self = shift;
296 my $scheme = $self->_scheme || "";
297 my $uc_scheme = $scheme =~ /[A-Z]/;
298 my $esc = $$self =~ /%[a-fA-F0-9]{2}/;
299 return $self unless $uc_scheme || $esc;
300
301 my $other = $self->clone;
302 if ($uc_scheme) {
303 $other->_scheme(lc $scheme);
304 }
305 if ($esc) {
306 $$other =~ s{%([0-9a-fA-F]{2})}
307 { my $a = chr(hex($1));
308 $a =~ /^[$unreserved]\z/o ? $a : "%\U$1"
309 }ge;
310 }
311 return $other;
312}
313
314# Compare two URIs, subclasses will provide a more correct implementation
315sub eq {
316 my($self, $other) = @_;
317 $self = URI->new($self, $other) unless ref $self;
318 $other = URI->new($other, $self) unless ref $other;
319 ref($self) eq ref($other) && # same class
320 $self->canonical->as_string eq $other->canonical->as_string;
321}
322
323# generic-URI transformation methods
324sub abs { $_[0]; }
325sub rel { $_[0]; }
326
327sub secure { 0 }
328
329# help out Storable
330sub STORABLE_freeze {
331 my($self, $cloning) = @_;
332 return $$self;
333}
334
335sub STORABLE_thaw {
336 my($self, $cloning, $str) = @_;
337 $$self = $str;
338}
339
34016µs1;
341
342__END__
 
# spent 13µs within URI::CORE:match which was called 7 times, avg 2µs/call: # 2 times (4µs+0s) by URI::new at line 47, avg 2µs/call # 2 times (4µs+0s) by URI::_init at line 82, avg 2µs/call # 2 times (2µs+0s) by URI::implementor at line 101, avg 1µs/call # once (2µs+0s) by URI::_scheme at line 166
sub URI::CORE:match; # opcode
# spent 71µs within URI::CORE:regcomp which was called 9 times, avg 8µs/call: # 2 times (20µs+0s) by URI::_uric_escape at line 92, avg 10µs/call # 2 times (16µs+0s) by URI::new at line 47, avg 8µs/call # 2 times (11µs+0s) by URI::_init at line 82, avg 6µs/call # 2 times (10µs+0s) by URI::implementor at line 101, avg 5µs/call # once (14µs+0s) by URI::_scheme at line 166
sub URI::CORE:regcomp; # opcode
# spent 9µs within URI::CORE:subst which was called 13 times, avg 677ns/call: # 2 times (2µs+0s) by URI::_uric_escape at line 92, avg 1µs/call # 2 times (2µs+0s) by URI::new at line 43, avg 1µs/call # 2 times (2µs+0s) by URI::new at line 44, avg 750ns/call # 2 times (1µs+0s) by URI::new at line 41, avg 550ns/call # 2 times (600ns+0s) by URI::new at line 42, avg 300ns/call # once (500ns+0s) by URI::implementor at line 124 # once (200ns+0s) by URI::implementor at line 125 # once (200ns+0s) by URI::implementor at line 126
sub URI::CORE:subst; # opcode