← Index
NYTProf Performance Profile   « line view »
For /home/ss5/perl5/perlbrew/perls/perl-5.22.0/bin/benchmarkanything-storage
  Run on Mon Jan 29 16:55:34 2018
Reported on Mon Jan 29 16:57:06 2018

Filename/home/ss5/perl5/perlbrew/perls/perl-5.22.0/lib/site_perl/5.22.0/Exporter/Tiny.pm
StatementsExecuted 437 statements in 2.39ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
555180µs892µsExporter::Tiny::::importExporter::Tiny::import
511125µs125µsExporter::Tiny::::CORE:sortExporter::Tiny::CORE:sort (opcode)
1421114µs114µsExporter::Tiny::::CORE:regcompExporter::Tiny::CORE:regcomp (opcode)
911114µs114µsExporter::Tiny::::_exporter_install_subExporter::Tiny::_exporter_install_sub
511112µs349µsExporter::Tiny::::_exporter_permitted_regexpExporter::Tiny::_exporter_permitted_regexp
91172µs123µsExporter::Tiny::::_exporter_expand_subExporter::Tiny::_exporter_expand_sub
51170µs80µsExporter::Tiny::::__ANON__[:38]Exporter::Tiny::__ANON__[:38]
51140µs40µsExporter::Tiny::::mkoptExporter::Tiny::mkopt
452127µs27µsExporter::Tiny::::CORE:matchExporter::Tiny::CORE:match (opcode)
1118µs10µsExporter::Tiny::::BEGIN@4Exporter::Tiny::BEGIN@4
1117µs7µsExporter::Tiny::::BEGIN@3Exporter::Tiny::BEGIN@3
5116µs6µsExporter::Tiny::::CORE:qrExporter::Tiny::CORE:qr (opcode)
5116µs6µsExporter::Tiny::::_exporter_validate_optsExporter::Tiny::_exporter_validate_opts
1116µs14µsExporter::Tiny::::BEGIN@143Exporter::Tiny::BEGIN@143
1116µs13µsExporter::Tiny::::BEGIN@283Exporter::Tiny::BEGIN@283
1116µs18µsExporter::Tiny::::BEGIN@48Exporter::Tiny::BEGIN@48
1115µs11µsExporter::Tiny::::BEGIN@206Exporter::Tiny::BEGIN@206
1115µs12µsExporter::Tiny::::BEGIN@170Exporter::Tiny::BEGIN@170
1115µs11µsExporter::Tiny::::BEGIN@189Exporter::Tiny::BEGIN@189
1115µs23µsExporter::Tiny::::BEGIN@5.24Exporter::Tiny::BEGIN@5.24
1115µs11µsExporter::Tiny::::BEGIN@297Exporter::Tiny::BEGIN@297
1114µs11µsExporter::Tiny::::BEGIN@253Exporter::Tiny::BEGIN@253
1114µs6µsExporter::Tiny::::BEGIN@5Exporter::Tiny::BEGIN@5
0000s0sExporter::Tiny::::__ANON__[:267]Exporter::Tiny::__ANON__[:267]
0000s0sExporter::Tiny::::__ANON__[:96]Exporter::Tiny::__ANON__[:96]
0000s0sExporter::Tiny::::_carpExporter::Tiny::_carp
0000s0sExporter::Tiny::::_croakExporter::Tiny::_croak
0000s0sExporter::Tiny::::_exporter_expand_regexpExporter::Tiny::_exporter_expand_regexp
0000s0sExporter::Tiny::::_exporter_expand_tagExporter::Tiny::_exporter_expand_tag
0000s0sExporter::Tiny::::_exporter_failExporter::Tiny::_exporter_fail
0000s0sExporter::Tiny::::_exporter_merge_optsExporter::Tiny::_exporter_merge_opts
0000s0sExporter::Tiny::::_exporter_uninstall_subExporter::Tiny::_exporter_uninstall_sub
0000s0sExporter::Tiny::::_exporter_validate_unimport_optsExporter::Tiny::_exporter_validate_unimport_opts
0000s0sExporter::Tiny::::mkopt_hashExporter::Tiny::mkopt_hash
0000s0sExporter::Tiny::::unimportExporter::Tiny::unimport
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Exporter::Tiny;
2
3220µs17µs
# spent 7µs within Exporter::Tiny::BEGIN@3 which was called: # once (7µs+0s) by List::MoreUtils::BEGIN@12 at line 3
use 5.006001;
# spent 7µs making 1 call to Exporter::Tiny::BEGIN@3
4211µs211µs
# spent 10µs (8+1) within Exporter::Tiny::BEGIN@4 which was called: # once (8µs+1µs) by List::MoreUtils::BEGIN@12 at line 4
use strict;
# spent 10µs making 1 call to Exporter::Tiny::BEGIN@4 # spent 1µs making 1 call to strict::import
54284µs450µs
# spent 6µs (4+3) within Exporter::Tiny::BEGIN@5 which was called: # once (4µs+3µs) by List::MoreUtils::BEGIN@12 at line 5 # spent 23µs (5+18) within Exporter::Tiny::BEGIN@5.24 which was called: # once (5µs+18µs) by List::MoreUtils::BEGIN@12 at line 5
use warnings; no warnings qw(void once uninitialized numeric redefine);
# spent 23µs making 1 call to Exporter::Tiny::BEGIN@5.24 # spent 18µs making 1 call to warnings::unimport # spent 6µs making 1 call to Exporter::Tiny::BEGIN@5 # spent 3µs making 1 call to warnings::import
6
71300nsour $AUTHORITY = 'cpan:TOBYINK';
81100nsour $VERSION = '0.042';
911µsour @EXPORT_OK = qw< mkopt mkopt_hash _croak _carp >;
10
11sub _croak ($;@) { require Carp; my $fmt = shift; @_ = sprintf($fmt, @_); goto \&Carp::croak }
12sub _carp ($;@) { require Carp; my $fmt = shift; @_ = sprintf($fmt, @_); goto \&Carp::carp }
13
14my $_process_optlist = sub
15
# spent 80µs (70+10) within Exporter::Tiny::__ANON__[/home/ss5/perl5/perlbrew/perls/perl-5.22.0/lib/site_perl/5.22.0/Exporter/Tiny.pm:38] which was called 5 times, avg 16µs/call: # 5 times (70µs+10µs) by Exporter::Tiny::import at line 50, avg 16µs/call
{
1651µs my $class = shift;
1752µs my ($global_opts, $opts, $want, $not_want) = @_;
18
19515µs while (@$opts)
20 {
2193µs my $opt = shift @{$opts};
2293µs my ($name, $value) = @$opt;
23
24 ($name =~ m{\A\!(/.+/[msixpodual]+)\z}) ?
25 do {
26 my @not = $class->_exporter_expand_regexp($1, $value, $global_opts);
27 ++$not_want->{$_->[0]} for @not;
28 } :
29 ($name =~ m{\A\!(.+)\z}) ?
30959µs3610µs (++$not_want->{$1}) :
# spent 10µs making 36 calls to Exporter::Tiny::CORE:match, avg 278ns/call
31 ($name =~ m{\A[:-](.+)\z}) ?
32 push(@$opts, $class->_exporter_expand_tag($1, $value, $global_opts)) :
33 ($name =~ m{\A/.+/[msixpodual]+\z}) ?
34 push(@$opts, $class->_exporter_expand_regexp($name, $value, $global_opts)) :
35 # else ?
36 push(@$want, $opt);
37 }
3813µs};
39
40sub import
41
# spent 892µs (180+712) within Exporter::Tiny::import which was called 5 times, avg 178µs/call: # once (60µs+263µs) by Moose::Exporter::BEGIN@9 at line 9 of Moose/Exporter.pm # once (37µs+140µs) by SQL::SplitStatement::BEGIN@15 at line 15 of SQL/SplitStatement.pm # once (33µs+127µs) by Moose::Meta::Class::BEGIN@10 at line 10 of Moose/Meta/Class.pm # once (31µs+107µs) by BenchmarkAnything::Storage::Backend::SQL::Query::common::BEGIN@9 at line 9 of BenchmarkAnything/Storage/Backend/SQL/Query/common.pm # once (19µs+75µs) by BenchmarkAnything::Storage::Backend::SQL::Query::mysql::BEGIN@9 at line 9 of BenchmarkAnything/Storage/Backend/SQL/Query/mysql.pm
{
4252µs my $class = shift;
4356µs my $global_opts = +{ @_ && ref($_[0]) eq q(HASH) ? %{+shift} : () };
4457µs $global_opts->{into} = caller unless exists $global_opts->{into};
45
4651µs my @want;
4754µs my %not_want; $global_opts->{not} = \%not_want;
4812373µs231µs
# spent 18µs (6+13) within Exporter::Tiny::BEGIN@48 which was called: # once (6µs+13µs) by List::MoreUtils::BEGIN@12 at line 48
my @args = do { no strict qw(refs); @_ ? @_ : @{"$class\::EXPORT"} };
# spent 18µs making 1 call to Exporter::Tiny::BEGIN@48 # spent 13µs making 1 call to strict::unimport
4959µs540µs my $opts = mkopt(\@args);
# spent 40µs making 5 calls to Exporter::Tiny::mkopt, avg 8µs/call
50512µs580µs $class->$_process_optlist($global_opts, $opts, \@want, \%not_want);
# spent 80µs making 5 calls to Exporter::Tiny::__ANON__[Exporter/Tiny.pm:38], avg 16µs/call
51
52516µs5349µs my $permitted = $class->_exporter_permitted_regexp($global_opts);
# spent 349µs making 5 calls to Exporter::Tiny::_exporter_permitted_regexp, avg 70µs/call
53512µs56µs $class->_exporter_validate_opts($global_opts);
# spent 6µs making 5 calls to Exporter::Tiny::_exporter_validate_opts, avg 1µs/call
54
55525µs for my $wanted (@want)
56 {
5794µs next if $not_want{$wanted->[0]};
58
59922µs9123µs my %symbols = $class->_exporter_expand_sub(@$wanted, $global_opts, $permitted);
# spent 123µs making 9 calls to Exporter::Tiny::_exporter_expand_sub, avg 14µs/call
60 $class->_exporter_install_sub($_, $wanted->[1], $global_opts, $symbols{$_})
61929µs9114µs for keys %symbols;
# spent 114µs making 9 calls to Exporter::Tiny::_exporter_install_sub, avg 13µs/call
62 }
63}
64
65sub unimport
66{
67 my $class = shift;
68 my $global_opts = +{ @_ && ref($_[0]) eq q(HASH) ? %{+shift} : () };
69 $global_opts->{into} = caller unless exists $global_opts->{into};
70 $global_opts->{is_unimport} = 1;
71
72 my @want;
73 my %not_want; $global_opts->{not} = \%not_want;
74 my @args = do { our %TRACKED; @_ ? @_ : keys(%{$TRACKED{$class}{$global_opts->{into}}}) };
75 my $opts = mkopt(\@args);
76 $class->$_process_optlist($global_opts, $opts, \@want, \%not_want);
77
78 my $permitted = $class->_exporter_permitted_regexp($global_opts);
79 $class->_exporter_validate_unimport_opts($global_opts);
80
81 my $expando = $class->can('_exporter_expand_sub');
82 $expando = undef if $expando == \&_exporter_expand_sub;
83
84 for my $wanted (@want)
85 {
86 next if $not_want{$wanted->[0]};
87
88 if ($wanted->[1])
89 {
90 _carp("Passing options to unimport '%s' makes no sense", $wanted->[0])
91 unless (ref($wanted->[1]) eq 'HASH' and not keys %{$wanted->[1]});
92 }
93
94 my %symbols = defined($expando)
95 ? $class->$expando(@$wanted, $global_opts, $permitted)
96 : ($wanted->[0] => sub { "dummy" });
97 $class->_exporter_uninstall_sub($_, $wanted->[1], $global_opts)
98 for keys %symbols;
99 }
100}
101
102# Called once per import/unimport, passed the "global" import options.
103# Expected to validate the options and carp or croak if there are problems.
104# Can also take the opportunity to do other stuff if needed.
105#
10659µs
# spent 6µs within Exporter::Tiny::_exporter_validate_opts which was called 5 times, avg 1µs/call: # 5 times (6µs+0s) by Exporter::Tiny::import at line 53, avg 1µs/call
sub _exporter_validate_opts { 1 }
107sub _exporter_validate_unimport_opts { 1 }
108
109# Called after expanding a tag or regexp to merge the tag's options with
110# any sub-specific options.
111#
112sub _exporter_merge_opts
113{
114 my $class = shift;
115 my ($tag_opts, $global_opts, @stuff) = @_;
116
117 $tag_opts = {} unless ref($tag_opts) eq q(HASH);
118 _croak('Cannot provide an -as option for tags')
119 if exists $tag_opts->{-as};
120
121 my $optlist = mkopt(\@stuff);
122 for my $export (@$optlist)
123 {
124 next if defined($export->[1]) && ref($export->[1]) ne q(HASH);
125
126 my %sub_opts = ( %{ $export->[1] or {} }, %$tag_opts );
127 $sub_opts{-prefix} = sprintf('%s%s', $tag_opts->{-prefix}, $export->[1]{-prefix})
128 if exists($export->[1]{-prefix}) && exists($tag_opts->{-prefix});
129 $sub_opts{-suffix} = sprintf('%s%s', $export->[1]{-suffix}, $tag_opts->{-suffix})
130 if exists($export->[1]{-suffix}) && exists($tag_opts->{-suffix});
131 $export->[1] = \%sub_opts;
132 }
133 return @$optlist;
134}
135
136# Given a tag name, looks it up in %EXPORT_TAGS and returns the list of
137# associated functions. The default implementation magically handles tags
138# "all" and "default". The default implementation interprets any undefined
139# tags as being global options.
140#
141sub _exporter_expand_tag
142{
143298µs222µs
# spent 14µs (6+8) within Exporter::Tiny::BEGIN@143 which was called: # once (6µs+8µs) by List::MoreUtils::BEGIN@12 at line 143
no strict qw(refs);
# spent 14µs making 1 call to Exporter::Tiny::BEGIN@143 # spent 8µs making 1 call to strict::unimport
144
145 my $class = shift;
146 my ($name, $value, $globals) = @_;
147 my $tags = \%{"$class\::EXPORT_TAGS"};
148
149 return $class->_exporter_merge_opts($value, $globals, $tags->{$name}->($class, @_))
150 if ref($tags->{$name}) eq q(CODE);
151
152 return $class->_exporter_merge_opts($value, $globals, @{$tags->{$name}})
153 if exists $tags->{$name};
154
155 return $class->_exporter_merge_opts($value, $globals, @{"$class\::EXPORT"}, @{"$class\::EXPORT_OK"})
156 if $name eq 'all';
157
158 return $class->_exporter_merge_opts($value, $globals, @{"$class\::EXPORT"})
159 if $name eq 'default';
160
161 $globals->{$name} = $value || 1;
162 return;
163}
164
165# Given a regexp-like string, looks it up in @EXPORT_OK and returns the
166# list of matching functions.
167#
168sub _exporter_expand_regexp
169{
170275µs218µs
# spent 12µs (5+7) within Exporter::Tiny::BEGIN@170 which was called: # once (5µs+7µs) by List::MoreUtils::BEGIN@12 at line 170
no strict qw(refs);
# spent 12µs making 1 call to Exporter::Tiny::BEGIN@170 # spent 6µs making 1 call to strict::unimport
171 our %TRACKED;
172
173 my $class = shift;
174 my ($name, $value, $globals) = @_;
175 my $compiled = eval("qr$name");
176
177 my @possible = $globals->{is_unimport}
178 ? keys( %{$TRACKED{$class}{$globals->{into}}} )
179 : @{"$class\::EXPORT_OK"};
180
181 $class->_exporter_merge_opts($value, $globals, grep /$compiled/, @possible);
182}
183
184# Helper for _exporter_expand_sub. Returns a regexp matching all subs in
185# the exporter package which are available for export.
186#
187sub _exporter_permitted_regexp
188
# spent 349µs (112+238) within Exporter::Tiny::_exporter_permitted_regexp which was called 5 times, avg 70µs/call: # 5 times (112µs+238µs) by Exporter::Tiny::import at line 52, avg 70µs/call
{
189277µs217µs
# spent 11µs (5+6) within Exporter::Tiny::BEGIN@189 which was called: # once (5µs+6µs) by List::MoreUtils::BEGIN@12 at line 189
no strict qw(refs);
# spent 11µs making 1 call to Exporter::Tiny::BEGIN@189 # spent 6µs making 1 call to strict::unimport
19051µs my $class = shift;
191 my $re = join "|", map quotemeta, sort {
192 length($b) <=> length($a) or $a cmp $b
1935209µs5125µs } @{"$class\::EXPORT"}, @{"$class\::EXPORT_OK"};
# spent 125µs making 5 calls to Exporter::Tiny::CORE:sort, avg 25µs/call
1945143µs10112µs qr{^(?:$re)$}ms;
# spent 106µs making 5 calls to Exporter::Tiny::CORE:regcomp, avg 21µs/call # spent 6µs making 5 calls to Exporter::Tiny::CORE:qr, avg 1µs/call
195}
196
197# Given a sub name, returns a hash of subs to install (usually just one sub).
198# Keys are sub names, values are coderefs.
199#
200sub _exporter_expand_sub
201
# spent 123µs (72+51) within Exporter::Tiny::_exporter_expand_sub which was called 9 times, avg 14µs/call: # 9 times (72µs+51µs) by Exporter::Tiny::import at line 59, avg 14µs/call
{
20292µs my $class = shift;
20393µs my ($name, $value, $globals, $permitted) = @_;
20492µs $permitted ||= $class->_exporter_permitted_regexp($globals);
205
2062157µs217µs
# spent 11µs (5+6) within Exporter::Tiny::BEGIN@206 which was called: # once (5µs+6µs) by List::MoreUtils::BEGIN@12 at line 206
no strict qw(refs);
# spent 11µs making 1 call to Exporter::Tiny::BEGIN@206 # spent 6µs making 1 call to strict::unimport
207
208945µs1825µs if ($name =~ $permitted)
# spent 17µs making 9 calls to Exporter::Tiny::CORE:match, avg 2µs/call # spent 8µs making 9 calls to Exporter::Tiny::CORE:regcomp, avg 900ns/call
209 {
210939µs921µs my $generator = $class->can("_generate_$name");
# spent 21µs making 9 calls to UNIVERSAL::can, avg 2µs/call
21192µs return $name => $class->$generator($name, $value, $globals) if $generator;
212
213917µs95µs my $sub = $class->can($name);
# spent 5µs making 9 calls to UNIVERSAL::can, avg 600ns/call
214918µs return $name => $sub if $sub;
215 }
216
217 $class->_exporter_fail(@_);
218}
219
220# Called by _exporter_expand_sub if it is unable to generate a key-value
221# pair for a sub.
222#
223sub _exporter_fail
224{
225 my $class = shift;
226 my ($name, $value, $globals) = @_;
227 return if $globals->{is_unimport};
228 _croak("Could not find sub '%s' exported by %s", $name, $class);
229}
230
231# Actually performs the installation of the sub into the target package. This
232# also handles renaming the sub.
233#
234sub _exporter_install_sub
235
# spent 114µs within Exporter::Tiny::_exporter_install_sub which was called 9 times, avg 13µs/call: # 9 times (114µs+0s) by Exporter::Tiny::import at line 61, avg 13µs/call
{
23692µs my $class = shift;
23793µs my ($name, $value, $globals, $sym) = @_;
238
23994µs my $into = $globals->{into};
24094µs my $installer = $globals->{installer} || $globals->{exporter};
241
24297µs $name = $value->{-as} || $name;
24395µs unless (ref($name) eq q(SCALAR))
244 {
245918µs my ($prefix) = grep defined, $value->{-prefix}, $globals->{prefix}, q();
246910µs my ($suffix) = grep defined, $value->{-suffix}, $globals->{suffix}, q();
24796µs $name = "$prefix$name$suffix";
248 }
249
25092µs return ($$name = $sym) if ref($name) eq q(SCALAR);
25193µs return ($into->{$name} = $sym) if ref($into) eq q(HASH);
252
253296µs217µs
# spent 11µs (4+6) within Exporter::Tiny::BEGIN@253 which was called: # once (4µs+6µs) by List::MoreUtils::BEGIN@12 at line 253
no strict qw(refs);
# spent 11µs making 1 call to Exporter::Tiny::BEGIN@253 # spent 6µs making 1 call to strict::unimport
254
255912µs if (exists &{"$into\::$name"} and \&{"$into\::$name"} != $sym)
256 {
257 my ($level) = grep defined, $value->{-replace}, $globals->{replace}, q(0);
258 my $action = {
259 carp => \&_carp,
260 0 => \&_carp,
261 '' => \&_carp,
262 warn => \&_carp,
263 nonfatal => \&_carp,
264 croak => \&_croak,
265 fatal => \&_croak,
266 die => \&_croak,
267 }->{$level} || sub {};
268
269 $action->(
270 $action == \&_croak
271 ? "Refusing to overwrite existing sub '%s::%s' with sub '%s' exported by %s"
272 : "Overwriting existing sub '%s::%s' with sub '%s' exported by %s",
273 $into,
274 $name,
275 $_[0],
276 $class,
277 );
278 }
279
280 our %TRACKED;
28199µs $TRACKED{$class}{$into}{$name} = $sym;
282
283279µs221µs
# spent 13µs (6+8) within Exporter::Tiny::BEGIN@283 which was called: # once (6µs+8µs) by List::MoreUtils::BEGIN@12 at line 283
no warnings qw(prototype);
# spent 13µs making 1 call to Exporter::Tiny::BEGIN@283 # spent 8µs making 1 call to warnings::unimport
284 $installer
285 ? $installer->($globals, [$name, $sym])
286935µs : (*{"$into\::$name"} = $sym);
287}
288
289sub _exporter_uninstall_sub
290{
291 our %TRACKED;
292 my $class = shift;
293 my ($name, $value, $globals, $sym) = @_;
294 my $into = $globals->{into};
295 ref $into and return;
296
2972220µs217µs
# spent 11µs (5+6) within Exporter::Tiny::BEGIN@297 which was called: # once (5µs+6µs) by List::MoreUtils::BEGIN@12 at line 297
no strict qw(refs);
# spent 11µs making 1 call to Exporter::Tiny::BEGIN@297 # spent 6µs making 1 call to strict::unimport
298
299 # Cowardly refuse to uninstall a sub that differs from the one
300 # we installed!
301 my $our_coderef = $TRACKED{$class}{$into}{$name};
302 my $cur_coderef = exists(&{"$into\::$name"}) ? \&{"$into\::$name"} : -1;
303 return unless $our_coderef == $cur_coderef;
304
305 my $stash = \%{"$into\::"};
306 my $old = delete $stash->{$name};
307 my $full_name = join('::', $into, $name);
308 foreach my $type (qw(SCALAR HASH ARRAY IO)) # everything but the CODE
309 {
310 next unless defined(*{$old}{$type});
311 *$full_name = *{$old}{$type};
312 }
313
314 delete $TRACKED{$class}{$into}{$name};
315}
316
317sub mkopt
318
# spent 40µs within Exporter::Tiny::mkopt which was called 5 times, avg 8µs/call: # 5 times (40µs+0s) by Exporter::Tiny::import at line 49, avg 8µs/call
{
31952µs my $in = shift or return [];
32051µs my @out;
321
32253µs $in = [map(($_ => ref($in->{$_}) ? $in->{$_} : ()), sort keys %$in)]
323 if ref($in) eq q(HASH);
324
32558µs for (my $i = 0; $i < @$in; $i++)
326 {
32793µs my $k = $in->[$i];
32891µs my $v;
329
33097µs ($i == $#$in) ? ($v = undef) :
331 !defined($in->[$i+1]) ? (++$i, ($v = undef)) :
332 !ref($in->[$i+1]) ? ($v = undef) :
333 ($v = $in->[++$i]);
334
33597µs push @out, [ $k => $v ];
336 }
337
338514µs \@out;
339}
340
341sub mkopt_hash
342{
343 my $in = shift or return;
344 my %out = map +($_->[0] => $_->[1]), @{ mkopt($in) };
345 \%out;
346}
347
34815µs1;
349
350__END__
 
# spent 27µs within Exporter::Tiny::CORE:match which was called 45 times, avg 593ns/call: # 36 times (10µs+0s) by Exporter::Tiny::__ANON__[/home/ss5/perl5/perlbrew/perls/perl-5.22.0/lib/site_perl/5.22.0/Exporter/Tiny.pm:38] at line 30, avg 278ns/call # 9 times (17µs+0s) by Exporter::Tiny::_exporter_expand_sub at line 208, avg 2µs/call
sub Exporter::Tiny::CORE:match; # opcode
# spent 6µs within Exporter::Tiny::CORE:qr which was called 5 times, avg 1µs/call: # 5 times (6µs+0s) by Exporter::Tiny::_exporter_permitted_regexp at line 194, avg 1µs/call
sub Exporter::Tiny::CORE:qr; # opcode
# spent 114µs within Exporter::Tiny::CORE:regcomp which was called 14 times, avg 8µs/call: # 9 times (8µs+0s) by Exporter::Tiny::_exporter_expand_sub at line 208, avg 900ns/call # 5 times (106µs+0s) by Exporter::Tiny::_exporter_permitted_regexp at line 194, avg 21µs/call
sub Exporter::Tiny::CORE:regcomp; # opcode
# spent 125µs within Exporter::Tiny::CORE:sort which was called 5 times, avg 25µs/call: # 5 times (125µs+0s) by Exporter::Tiny::_exporter_permitted_regexp at line 193, avg 25µs/call
sub Exporter::Tiny::CORE:sort; # opcode