← Index
NYTProf Performance Profile   « line view »
For /Users/timbo/perl5/perlbrew/perls/perl-5.18.2/bin/perlcritic
  Run on Sat Mar 19 22:12:22 2016
Reported on Sat Mar 19 22:14:11 2016

Filename/Users/timbo/perl5/perlbrew/perls/perl-5.18.2/lib/site_perl/5.18.2/Perl/Critic/Violation.pm
StatementsExecuted 569 statements in 3.62ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1112.47ms2.59msPerl::Critic::Violation::::BEGIN@19Perl::Critic::Violation::BEGIN@19
1112.41ms4.75msPerl::Critic::Violation::::BEGIN@26Perl::Critic::Violation::BEGIN@26
1111.17ms1.34msPerl::Critic::Violation::::BEGIN@17Perl::Critic::Violation::BEGIN@17
14411907µs1.07msPerl::Critic::Violation::::sort_by_locationPerl::Critic::Violation::sort_by_location
111436µs599µsPerl::Critic::Violation::::BEGIN@21Perl::Critic::Violation::BEGIN@21
111362µs871µsPerl::Critic::Violation::::BEGIN@30Perl::Critic::Violation::BEGIN@30
14411160µs160µsPerl::Critic::Violation::::CORE:sortPerl::Critic::Violation::CORE:sort (opcode)
311155µs817µsPerl::Critic::Violation::::newPerl::Critic::Violation::new
31177µs468µsPerl::Critic::Violation::::_line_containing_violationPerl::Critic::Violation::_line_containing_violation
31127µs29µsPerl::Critic::Violation::::_chomp_periodsPerl::Critic::Violation::_chomp_periods
11115µs15µsPerl::Critic::Violation::::BEGIN@10Perl::Critic::Violation::BEGIN@10
1119µs32µsPerl::Critic::Violation::::BEGIN@20Perl::Critic::Violation::BEGIN@20
1118µs369µsPerl::Critic::Violation::::BEGIN@14Perl::Critic::Violation::BEGIN@14
1118µs34µsPerl::Critic::Violation::::BEGIN@23Perl::Critic::Violation::BEGIN@23
1118µs27µsPerl::Critic::Violation::::BEGIN@15Perl::Critic::Violation::BEGIN@15
1117µs283µsPerl::Critic::Violation::::BEGIN@25Perl::Critic::Violation::BEGIN@25
1117µs19µsPerl::Critic::Violation::::BEGIN@11Perl::Critic::Violation::BEGIN@11
1117µs11µsPerl::Critic::Violation::::BEGIN@12Perl::Critic::Violation::BEGIN@12
3116µs6µsPerl::Critic::Violation::::locationPerl::Critic::Violation::location
3115µs5µsPerl::Critic::Violation::::CORE:qrPerl::Critic::Violation::CORE:qr (opcode)
3114µs4µsPerl::Critic::Violation::::CORE:regcompPerl::Critic::Violation::CORE:regcomp (opcode)
1114µs4µsPerl::Critic::Violation::::BEGIN@18Perl::Critic::Violation::BEGIN@18
3112µs2µsPerl::Critic::Violation::::CORE:substPerl::Critic::Violation::CORE:subst (opcode)
0000s0sPerl::Critic::Violation::::__ANON__[:265]Perl::Critic::Violation::__ANON__[:265]
0000s0sPerl::Critic::Violation::::__ANON__[:266]Perl::Critic::Violation::__ANON__[:266]
0000s0sPerl::Critic::Violation::::__ANON__[:267]Perl::Critic::Violation::__ANON__[:267]
0000s0sPerl::Critic::Violation::::__ANON__[:268]Perl::Critic::Violation::__ANON__[:268]
0000s0sPerl::Critic::Violation::::__ANON__[:269]Perl::Critic::Violation::__ANON__[:269]
0000s0sPerl::Critic::Violation::::__ANON__[:270]Perl::Critic::Violation::__ANON__[:270]
0000s0sPerl::Critic::Violation::::__ANON__[:271]Perl::Critic::Violation::__ANON__[:271]
0000s0sPerl::Critic::Violation::::__ANON__[:272]Perl::Critic::Violation::__ANON__[:272]
0000s0sPerl::Critic::Violation::::__ANON__[:276]Perl::Critic::Violation::__ANON__[:276]
0000s0sPerl::Critic::Violation::::__ANON__[:277]Perl::Critic::Violation::__ANON__[:277]
0000s0sPerl::Critic::Violation::::_comparePerl::Critic::Violation::_compare
0000s0sPerl::Critic::Violation::::column_numberPerl::Critic::Violation::column_number
0000s0sPerl::Critic::Violation::::descriptionPerl::Critic::Violation::description
0000s0sPerl::Critic::Violation::::diagnosticsPerl::Critic::Violation::diagnostics
0000s0sPerl::Critic::Violation::::element_classPerl::Critic::Violation::element_class
0000s0sPerl::Critic::Violation::::explanationPerl::Critic::Violation::explanation
0000s0sPerl::Critic::Violation::::filenamePerl::Critic::Violation::filename
0000s0sPerl::Critic::Violation::::get_formatPerl::Critic::Violation::get_format
0000s0sPerl::Critic::Violation::::line_numberPerl::Critic::Violation::line_number
0000s0sPerl::Critic::Violation::::logical_filenamePerl::Critic::Violation::logical_filename
0000s0sPerl::Critic::Violation::::logical_line_numberPerl::Critic::Violation::logical_line_number
0000s0sPerl::Critic::Violation::::policyPerl::Critic::Violation::policy
0000s0sPerl::Critic::Violation::::set_formatPerl::Critic::Violation::set_format
0000s0sPerl::Critic::Violation::::severityPerl::Critic::Violation::severity
0000s0sPerl::Critic::Violation::::sort_by_severityPerl::Critic::Violation::sort_by_severity
0000s0sPerl::Critic::Violation::::sourcePerl::Critic::Violation::source
0000s0sPerl::Critic::Violation::::to_stringPerl::Critic::Violation::to_string
0000s0sPerl::Critic::Violation::::visual_column_numberPerl::Critic::Violation::visual_column_number
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1##############################################################################
2# $URL$
3# $Date$
4# $Author$
5# $Revision$
6##############################################################################
7
8package Perl::Critic::Violation;
9
10238µs115µs
# spent 15µs within Perl::Critic::Violation::BEGIN@10 which was called: # once (15µs+0s) by Perl::Critic::Command::BEGIN@27 at line 10
use 5.006001;
# spent 15µs making 1 call to Perl::Critic::Violation::BEGIN@10
11219µs231µs
# spent 19µs (7+12) within Perl::Critic::Violation::BEGIN@11 which was called: # once (7µs+12µs) by Perl::Critic::Command::BEGIN@27 at line 11
use strict;
# spent 19µs making 1 call to Perl::Critic::Violation::BEGIN@11 # spent 12µs making 1 call to strict::import
12225µs215µs
# spent 11µs (7+4) within Perl::Critic::Violation::BEGIN@12 which was called: # once (7µs+4µs) by Perl::Critic::Command::BEGIN@27 at line 12
use warnings;
# spent 11µs making 1 call to Perl::Critic::Violation::BEGIN@12 # spent 4µs making 1 call to warnings::import
13
14224µs2729µs
# spent 369µs (8+360) within Perl::Critic::Violation::BEGIN@14 which was called: # once (8µs+360µs) by Perl::Critic::Command::BEGIN@27 at line 14
use English qw< -no_match_vars >;
# spent 369µs making 1 call to Perl::Critic::Violation::BEGIN@14 # spent 360µs making 1 call to English::import
15223µs246µs
# spent 27µs (8+19) within Perl::Critic::Violation::BEGIN@15 which was called: # once (8µs+19µs) by Perl::Critic::Command::BEGIN@27 at line 15
use Readonly;
# spent 27µs making 1 call to Perl::Critic::Violation::BEGIN@15 # spent 19µs making 1 call to Exporter::import
16
172125µs21.37ms
# spent 1.34ms (1.17+163µs) within Perl::Critic::Violation::BEGIN@17 which was called: # once (1.17ms+163µs) by Perl::Critic::Command::BEGIN@27 at line 17
use File::Basename qw< basename >;
# spent 1.34ms making 1 call to Perl::Critic::Violation::BEGIN@17 # spent 31µs making 1 call to Exporter::import
18219µs14µs
# spent 4µs within Perl::Critic::Violation::BEGIN@18 which was called: # once (4µs+0s) by Perl::Critic::Command::BEGIN@27 at line 18
use IO::String qw< >;
# spent 4µs making 1 call to Perl::Critic::Violation::BEGIN@18
192100µs12.59ms
# spent 2.59ms (2.47+112µs) within Perl::Critic::Violation::BEGIN@19 which was called: # once (2.47ms+112µs) by Perl::Critic::Command::BEGIN@27 at line 19
use Pod::PlainText qw< >;
# spent 2.59ms making 1 call to Perl::Critic::Violation::BEGIN@19
20224µs256µs
# spent 32µs (9+24) within Perl::Critic::Violation::BEGIN@20 which was called: # once (9µs+24µs) by Perl::Critic::Command::BEGIN@27 at line 20
use Scalar::Util qw< blessed >;
# spent 32µs making 1 call to Perl::Critic::Violation::BEGIN@20 # spent 24µs making 1 call to Exporter::import
21294µs2626µs
# spent 599µs (436+163) within Perl::Critic::Violation::BEGIN@21 which was called: # once (436µs+163µs) by Perl::Critic::Command::BEGIN@27 at line 21
use String::Format qw< stringf >;
# spent 599µs making 1 call to Perl::Critic::Violation::BEGIN@21 # spent 26µs making 1 call to Exporter::import
22
23224µs259µs
# spent 34µs (8+26) within Perl::Critic::Violation::BEGIN@23 which was called: # once (8µs+26µs) by Perl::Critic::Command::BEGIN@27 at line 23
use overload ( q{""} => 'to_string', cmp => '_compare' );
# spent 34µs making 1 call to Perl::Critic::Violation::BEGIN@23 # spent 26µs making 1 call to overload::import
24
25225µs2559µs
# spent 283µs (7+276) within Perl::Critic::Violation::BEGIN@25 which was called: # once (7µs+276µs) by Perl::Critic::Command::BEGIN@27 at line 25
use Perl::Critic::Utils qw< :characters :internal_lookup >;
# spent 283µs making 1 call to Perl::Critic::Violation::BEGIN@25 # spent 276µs making 1 call to Exporter::import
26168µs
# spent 4.75ms (2.41+2.34) within Perl::Critic::Violation::BEGIN@26 which was called: # once (2.41ms+2.34ms) by Perl::Critic::Command::BEGIN@27 at line 29
use Perl::Critic::Utils::POD qw<
27 get_pod_section_for_module
28 trim_pod_section
29147µs24.87ms>;
# spent 4.75ms making 1 call to Perl::Critic::Violation::BEGIN@26 # spent 112µs making 1 call to Exporter::import
3021.66ms2930µs
# spent 871µs (362+509) within Perl::Critic::Violation::BEGIN@30 which was called: # once (362µs+509µs) by Perl::Critic::Command::BEGIN@27 at line 30
use Perl::Critic::Exception::Fatal::Internal qw< throw_internal >;
# spent 871µs making 1 call to Perl::Critic::Violation::BEGIN@30 # spent 59µs making 1 call to Exporter::import
31
321800nsour $VERSION = '1.121';
33
34
3513µs145µsReadonly::Scalar my $LOCATION_LINE_NUMBER => 0;
# spent 45µs making 1 call to Readonly::Scalar
3611µs130µsReadonly::Scalar my $LOCATION_COLUMN_NUMBER => 1;
# spent 30µs making 1 call to Readonly::Scalar
3711µs128µsReadonly::Scalar my $LOCATION_VISUAL_COLUMN_NUMBER => 2;
# spent 28µs making 1 call to Readonly::Scalar
3811µs127µsReadonly::Scalar my $LOCATION_LOGICAL_LINE_NUMBER => 3;
# spent 27µs making 1 call to Readonly::Scalar
3911µs127µsReadonly::Scalar my $LOCATION_LOGICAL_FILENAME => 4;
# spent 27µs making 1 call to Readonly::Scalar
40
41
42# Class variables...
431500nsmy $format = "%m at line %l, column %c. %e.\n"; # Default stringy format
441600nsmy %diagnostics = (); # Cache of diagnostic messages
45
46#-----------------------------------------------------------------------------
47
4811µs127µsReadonly::Scalar my $CONSTRUCTOR_ARG_COUNT => 5;
# spent 27µs making 1 call to Readonly::Scalar
49
50
# spent 817µs (155+663) within Perl::Critic::Violation::new which was called 3 times, avg 272µs/call: # 3 times (155µs+663µs) by Perl::Critic::Policy::Subroutines::ProhibitExplicitReturnUndef::violates at line 421 of Perl/Critic/Policy.pm, avg 272µs/call
sub new {
5132µs my ( $class, $desc, $expl, $elem, $sev ) = @_;
52
53 # Check arguments to help out developers who might
54 # be creating new Perl::Critic::Policy modules.
55
5637µs33µs if ( @_ != $CONSTRUCTOR_ARG_COUNT ) {
# spent 3µs making 3 calls to Readonly::Scalar::FETCH, avg 1µs/call
57 throw_internal 'Wrong number of args to Violation->new()';
58 }
59
60616µs36µs if ( eval { $elem->isa( 'Perl::Critic::Document' ) } ) {
# spent 6µs making 3 calls to UNIVERSAL::isa, avg 2µs/call
61 # break the facade, return the real PPI::Document
62 $elem = $elem->ppi_document();
63 }
64
65611µs32µs if ( not eval { $elem->isa( 'PPI::Element' ) } ) {
# spent 2µs making 3 calls to UNIVERSAL::isa, avg 600ns/call
66 throw_internal '3rd arg to Violation->new() must be a PPI::Element';
67 }
68
69 # Strip punctuation. These are controlled by the user via the
70 # formats. He/She can use whatever makes sense to them.
7137µs329µs ($desc, $expl) = _chomp_periods($desc, $expl);
# spent 29µs making 3 calls to Perl::Critic::Violation::_chomp_periods, avg 10µs/call
72
73 # Create object
7434µs my $self = bless {}, $class;
75328µs $self->{_description} = $desc;
7632µs $self->{_explanation} = $expl;
7731µs $self->{_severity} = $sev;
7833µs $self->{_policy} = caller;
79
80 # PPI eviscerates the Elements in a Document when the Document gets
81 # DESTROY()ed, and thus they aren't useful after it is gone. So we have
82 # to preemptively grab everything we could possibly want.
83315µs34µs $self->{_element_class} = blessed $elem;
# spent 4µs making 3 calls to Scalar::Util::blessed, avg 2µs/call
84
8538µs3127µs my $top = $elem->top();
# spent 127µs making 3 calls to PPI::Element::top, avg 42µs/call
86319µs69µs $self->{_filename} = $top->can('filename') ? $top->filename() : undef;
# spent 6µs making 3 calls to PPI::Document::File::filename, avg 2µs/call # spent 3µs making 3 calls to UNIVERSAL::can, avg 933ns/call
8736µs3468µs $self->{_source} = _line_containing_violation( $elem );
# spent 468µs making 3 calls to Perl::Critic::Violation::_line_containing_violation, avg 156µs/call
8837µs315µs $self->{_location} =
# spent 15µs making 3 calls to PPI::Element::location, avg 5µs/call
89 $elem->location() || [ 0, 0, 0, 0, $self->filename() ];
90
91312µs return $self;
92}
93
94#-----------------------------------------------------------------------------
95
96sub set_format { return $format = verbosity_to_format( $_[0] ); } ## no critic(ArgUnpacking)
97sub get_format { return $format; }
98
99#-----------------------------------------------------------------------------
100
101
# spent 1.07ms (907µs+160µs) within Perl::Critic::Violation::sort_by_location which was called 144 times, avg 7µs/call: # 144 times (907µs+160µs) by Perl::Critic::_gather_violations at line 148 of Perl/Critic.pm, avg 7µs/call
sub sort_by_location { ## no critic(ArgUnpacking)
102
10314486µs ref $_[0] || shift; # Can call as object or class method
10414452µs return scalar @_ if ! wantarray; # In case we are called in scalar context
105
106 ## TODO: What if $a and $b are not Violation objects?
107 return
108 map {$_->[0]}
109 sort { ($a->[1] <=> $b->[1]) || ($a->[2] <=> $b->[2]) }
110144887µs144160µs map {[$_, $_->location->[0] || 0, $_->location->[1] || 0]}
# spent 160µs making 144 calls to Perl::Critic::Violation::CORE:sort, avg 1µs/call
111 @_;
112}
113
114#-----------------------------------------------------------------------------
115
116sub sort_by_severity { ## no critic(ArgUnpacking)
117
118 ref $_[0] || shift; # Can call as object or class method
119 return scalar @_ if ! wantarray; # In case we are called in scalar context
120
121 ## TODO: What if $a and $b are not Violation objects?
122 return
123 map {$_->[0]}
124 sort { $a->[1] <=> $b->[1] }
125 map {[$_, $_->severity() || 0]}
126 @_;
127}
128
129#-----------------------------------------------------------------------------
130
131
# spent 6µs within Perl::Critic::Violation::location which was called 3 times, avg 2µs/call: # 3 times (6µs+0s) by Perl::Critic::_critique at line 185 of Perl/Critic.pm, avg 2µs/call
sub location {
13231µs my $self = shift;
133
13438µs return $self->{_location};
135}
136
137#-----------------------------------------------------------------------------
138
139sub line_number {
140 my ($self) = @_;
141
142 return $self->location()->[$LOCATION_LINE_NUMBER];
143}
144
145#-----------------------------------------------------------------------------
146
147sub logical_line_number {
148 my ($self) = @_;
149
150 return $self->location()->[$LOCATION_LOGICAL_LINE_NUMBER];
151}
152
153#-----------------------------------------------------------------------------
154
155sub column_number {
156 my ($self) = @_;
157
158 return $self->location()->[$LOCATION_COLUMN_NUMBER];
159}
160
161#-----------------------------------------------------------------------------
162
163sub visual_column_number {
164 my ($self) = @_;
165
166 return $self->location()->[$LOCATION_VISUAL_COLUMN_NUMBER];
167}
168
169#-----------------------------------------------------------------------------
170
171sub diagnostics {
172 my ($self) = @_;
173 my $policy = $self->policy();
174
175 if ( not $diagnostics{$policy} ) {
176 eval { ## no critic (RequireCheckingReturnValueOfEval)
177 my $module_name = ref $policy || $policy;
178 $diagnostics{$policy} =
179 trim_pod_section(
180 get_pod_section_for_module( $module_name, 'DESCRIPTION' )
181 );
182 };
183 $diagnostics{$policy} ||= " No diagnostics available\n";
184 }
185 return $diagnostics{$policy};
186}
187
188#-----------------------------------------------------------------------------
189
190sub description {
191 my $self = shift;
192 return $self->{_description};
193}
194
195#-----------------------------------------------------------------------------
196
197sub explanation {
198 my $self = shift;
199 my $expl = $self->{_explanation};
200 if ( !$expl ) {
201 $expl = '(no explanation)';
202 }
203 if ( ref $expl eq 'ARRAY' ) {
204 my $page = @{$expl} > 1 ? 'pages' : 'page';
205 $page .= $SPACE . join $COMMA, @{$expl};
206 $expl = "See $page of PBP";
207 }
208 return $expl;
209}
210
211#-----------------------------------------------------------------------------
212
213sub severity {
214 my $self = shift;
215 return $self->{_severity};
216}
217
218#-----------------------------------------------------------------------------
219
220sub policy {
221 my $self = shift;
222 return $self->{_policy};
223}
224
225#-----------------------------------------------------------------------------
226
227sub filename {
228 my $self = shift;
229 return $self->{_filename};
230}
231
232#-----------------------------------------------------------------------------
233
234sub logical_filename {
235 my ($self) = @_;
236
237 return $self->location()->[$LOCATION_LOGICAL_FILENAME];
238}
239
240#-----------------------------------------------------------------------------
241
242sub source {
243 my $self = shift;
244 return $self->{_source};
245}
246
247#-----------------------------------------------------------------------------
248
249sub element_class {
250 my ($self) = @_;
251
252 return $self->{_element_class};
253}
254
255#-----------------------------------------------------------------------------
256
257sub to_string {
258 my $self = shift;
259
260 my $long_policy = $self->policy();
261 (my $short_policy = $long_policy) =~ s/ \A Perl::Critic::Policy:: //xms;
262
263 # Wrap the more expensive ones in sub{} to postpone evaluation
264 my %fspec = (
265 'f' => sub { $self->logical_filename() },
266 'F' => sub { basename( $self->logical_filename() ) },
267 'g' => sub { $self->filename() },
268 'G' => sub { basename( $self->filename() ) },
269 'l' => sub { $self->logical_line_number() },
270 'L' => sub { $self->line_number() },
271 'c' => sub { $self->visual_column_number() },
272 'C' => sub { $self->element_class() },
273 'm' => $self->description(),
274 'e' => $self->explanation(),
275 's' => $self->severity(),
276 'd' => sub { $self->diagnostics() },
277 'r' => sub { $self->source() },
278 'P' => $long_policy,
279 'p' => $short_policy,
280 );
281 return stringf($format, %fspec);
282}
283
284#-----------------------------------------------------------------------------
285# Apparently, some perls do not implicitly stringify overloading
286# objects before doing a comparison. This causes a couple of our
287# sorting tests to fail. To work around this, we overload C<cmp> to
288# do it explicitly.
289#
290# 20060503 - More information: This problem has been traced to
291# Test::Simple versions <= 0.60, not perl itself. Upgrading to
292# Test::Simple v0.62 will fix the problem. But rather than forcing
293# everyone to upgrade, I have decided to leave this workaround in
294# place.
295
296sub _compare { return "$_[0]" cmp "$_[1]" }
297
298#-----------------------------------------------------------------------------
299
300
# spent 468µs (77+391) within Perl::Critic::Violation::_line_containing_violation which was called 3 times, avg 156µs/call: # 3 times (77µs+391µs) by Perl::Critic::Violation::new at line 87, avg 156µs/call
sub _line_containing_violation {
3013800ns my ( $elem ) = @_;
302
303312µs665µs my $stmnt = $elem->statement() || $elem;
# spent 64µs making 3 calls to PPI::Element::statement, avg 21µs/call # spent 2µs making 3 calls to PPI::Util::TRUE, avg 500ns/call
30439µs3234µs my $code_string = $stmnt->content() || $EMPTY;
# spent 234µs making 3 calls to PPI::Node::content, avg 78µs/call
305
306 # Split into individual lines
307332µs610µs my @lines = split qr{ \n\s* }xms, $code_string;
# spent 5µs making 3 calls to Perl::Critic::Violation::CORE:qr, avg 2µs/call # spent 4µs making 3 calls to Perl::Critic::Violation::CORE:regcomp, avg 1µs/call
308
309 # Take the line containing the element that is in violation
310314µs683µs my $inx = ( $elem->line_number() || 0 ) -
# spent 83µs making 6 calls to PPI::Element::line_number, avg 14µs/call
311 ( $stmnt->line_number() || 0 );
3123800ns $inx > @lines and return $EMPTY;
31339µs return $lines[$inx];
314}
315
316#-----------------------------------------------------------------------------
317
318
# spent 29µs (27+2) within Perl::Critic::Violation::_chomp_periods which was called 3 times, avg 10µs/call: # 3 times (27µs+2µs) by Perl::Critic::Violation::new at line 71, avg 10µs/call
sub _chomp_periods {
31932µs my @args = @_;
320
32134µs for (@args) {
32263µs next if not defined or ref;
323312µs32µs s{ [.]+ \z }{}xms
# spent 2µs making 3 calls to Perl::Critic::Violation::CORE:subst, avg 800ns/call
324 }
325
32639µs return @args;
327}
328
329#-----------------------------------------------------------------------------
330
33116µs1;
332
333#-----------------------------------------------------------------------------
334
335__END__
 
# spent 5µs within Perl::Critic::Violation::CORE:qr which was called 3 times, avg 2µs/call: # 3 times (5µs+0s) by Perl::Critic::Violation::_line_containing_violation at line 307, avg 2µs/call
sub Perl::Critic::Violation::CORE:qr; # opcode
# spent 4µs within Perl::Critic::Violation::CORE:regcomp which was called 3 times, avg 1µs/call: # 3 times (4µs+0s) by Perl::Critic::Violation::_line_containing_violation at line 307, avg 1µs/call
sub Perl::Critic::Violation::CORE:regcomp; # opcode
# spent 160µs within Perl::Critic::Violation::CORE:sort which was called 144 times, avg 1µs/call: # 144 times (160µs+0s) by Perl::Critic::Violation::sort_by_location at line 110, avg 1µs/call
sub Perl::Critic::Violation::CORE:sort; # opcode
# spent 2µs within Perl::Critic::Violation::CORE:subst which was called 3 times, avg 800ns/call: # 3 times (2µs+0s) by Perl::Critic::Violation::_chomp_periods at line 323, avg 800ns/call
sub Perl::Critic::Violation::CORE:subst; # opcode