← Index
NYTProf Performance Profile   « line view »
For ../prof.pl
  Run on Wed Dec 14 15:57:08 2022
Reported on Wed Dec 14 16:00:30 2022

Filename/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/strictures.pm
StatementsExecuted 724 statements in 3.40ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1811419µs14.9msstrictures::::_enable_2strictures::_enable_2
222222330µs482µsstrictures::::VERSIONstrictures::VERSION
2221228µs328µsstrictures::::_want_extrastrictures::_want_extra
222222225µs15.6msstrictures::::importstrictures::import
2211209µs15.4msstrictures::::_enablestrictures::_enable
221153µs53µsstrictures::::_want_extra_envstrictures::_want_extra_env
221147µs47µsstrictures::::CORE:matchstrictures::CORE:match (opcode)
41137µs202µsstrictures::::_enable_1strictures::_enable_1
11130µs33µsstrictures::::BEGIN@3strictures::BEGIN@3
11110µs25µsstrictures::::BEGIN@97strictures::BEGIN@97
1118µs8µsstrictures::::BEGIN@6strictures::BEGIN@6
1117µs48µsstrictures::::BEGIN@4strictures::BEGIN@4
0000s0sstrictures::::_load_extrasstrictures::_load_extras
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package strictures;
2
3240µs236µs
# spent 33µs (30+3) within strictures::BEGIN@3 which was called: # once (30µs+3µs) by OpenAPI::Modern::BEGIN@12 at line 3
use strict;
# spent 33µs making 1 call to strictures::BEGIN@3 # spent 3µs making 1 call to strict::import
42104µs289µs
# spent 48µs (7+41) within strictures::BEGIN@4 which was called: # once (7µs+41µs) by OpenAPI::Modern::BEGIN@12 at line 4
use warnings FATAL => 'all';
# spent 48µs making 1 call to strictures::BEGIN@4 # spent 41µs making 1 call to warnings::import
5
6
# spent 8µs within strictures::BEGIN@6 which was called: # once (8µs+0s) by OpenAPI::Modern::BEGIN@12 at line 11
BEGIN {
714µs *_PERL_LT_5_8_4 = ("$]" < 5.008004) ? sub(){1} : sub(){0};
8 # goto &UNIVERSAL::VERSION usually works on 5.8, but fails on some ARM
9 # machines. Seems to always work on 5.10 though.
1014µs *_CAN_GOTO_VERSION = ("$]" >= 5.010000) ? sub(){1} : sub(){0};
111154µs18µs}
# spent 8µs making 1 call to strictures::BEGIN@6
12
1310sour $VERSION = '2.000006';
1411µs$VERSION =~ tr/_//d;
15
16122µsour @WARNING_CATEGORIES = grep { exists $warnings::Offsets{$_} } qw(
17 closure
18 chmod
19 deprecated
20 exiting
21 experimental
22 experimental::alpha_assertions
23 experimental::autoderef
24 experimental::bitwise
25 experimental::const_attr
26 experimental::declared_refs
27 experimental::lexical_subs
28 experimental::lexical_topic
29 experimental::postderef
30 experimental::private_use
31 experimental::re_strict
32 experimental::refaliasing
33 experimental::regex_sets
34 experimental::script_run
35 experimental::signatures
36 experimental::smartmatch
37 experimental::win32_perlio
38 glob
39 imprecision
40 io
41 closed
42 exec
43 layer
44 newline
45 pipe
46 syscalls
47 unopened
48 locale
49 misc
50 missing
51 numeric
52 once
53 overflow
54 pack
55 portable
56 recursion
57 redefine
58 redundant
59 regexp
60 severe
61 debugging
62 inplace
63 internal
64 malloc
65 shadow
66 signal
67 substr
68 syntax
69 ambiguous
70 bareword
71 digit
72 illegalproto
73 parenthesis
74 precedence
75 printf
76 prototype
77 qw
78 reserved
79 semicolon
80 taint
81 threads
82 uninitialized
83 umask
84 unpack
85 untie
86 utf8
87 non_unicode
88 nonchar
89 surrogate
90 void
91 void_unusual
92 y2k
93);
94
95
# spent 482µs (330+152) within strictures::VERSION which was called 22 times, avg 22µs/call: # once (33µs+6µs) by Data::Perl::Role::Collection::Hash::BEGIN@5 at line 5 of Data/Perl/Role/Collection/Hash.pm # once (25µs+10µs) by OpenAPI::Modern::BEGIN@12 at line 12 of OpenAPI/Modern.pm # once (18µs+15µs) by JSON::Schema::Modern::Annotation::BEGIN@11 at line 11 of JSON/Schema/Modern/Annotation.pm # once (24µs+8µs) by JSON::Schema::Modern::Utilities::BEGIN@10 at line 10 of JSON/Schema/Modern/Utilities.pm # once (20µs+9µs) by Data::Perl::Collection::Array::MooseLike::BEGIN@5 at line 5 of Data/Perl/Collection/Array/MooseLike.pm # once (16µs+11µs) by JSON::Schema::Modern::Vocabulary::Core::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/Core.pm # once (15µs+12µs) by JSON::Schema::Modern::Vocabulary::FormatAssertion::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/FormatAssertion.pm # once (16µs+9µs) by JSON::Schema::Modern::Vocabulary::Content::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/Content.pm # once (14µs+7µs) by JSON::Schema::Modern::Document::BEGIN@11 at line 11 of JSON/Schema/Modern/Document.pm # once (14µs+7µs) by Data::Perl::Role::Collection::Array::BEGIN@5 at line 5 of Data/Perl/Role/Collection/Array.pm # once (14µs+7µs) by Data::Perl::Collection::Hash::MooseLike::BEGIN@5 at line 5 of Data/Perl/Collection/Hash/MooseLike.pm # once (13µs+7µs) by JSON::Schema::Modern::Vocabulary::MetaData::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/MetaData.pm # once (13µs+6µs) by JSON::Schema::Modern::Vocabulary::FormatAnnotation::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/FormatAnnotation.pm # once (12µs+5µs) by JSON::Schema::Modern::Vocabulary::Applicator::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/Applicator.pm # once (12µs+4µs) by JSON::Schema::Modern::Vocabulary::Unevaluated::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/Unevaluated.pm # once (12µs+4µs) by JSON::Schema::Modern::Result::BEGIN@11 at line 11 of JSON/Schema/Modern/Result.pm # once (11µs+4µs) by JSON::Schema::Modern::Error::BEGIN@11 at line 11 of JSON/Schema/Modern/Error.pm # once (11µs+4µs) by JSON::Schema::Modern::Document::OpenAPI::BEGIN@12 at line 12 of JSON/Schema/Modern/Document/OpenAPI.pm # once (10µs+4µs) by JSON::Schema::Modern::BEGIN@12 at line 12 of JSON/Schema/Modern.pm # once (9µs+5µs) by JSON::Schema::Modern::Vocabulary::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary.pm # once (10µs+4µs) by JSON::Schema::Modern::Vocabulary::OpenAPI::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/OpenAPI.pm # once (8µs+4µs) by JSON::Schema::Modern::Vocabulary::Validation::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/Validation.pm
sub VERSION {
96 {
97241.15ms240µs
# spent 25µs (10+15) within strictures::BEGIN@97 which was called: # once (10µs+15µs) by OpenAPI::Modern::BEGIN@12 at line 97
no warnings;
# spent 25µs making 1 call to strictures::BEGIN@97 # spent 15µs making 1 call to warnings::unimport
98224µs local $@;
9966306µs22152µs if (defined $_[1] && eval { &UNIVERSAL::VERSION; 1}) {
# spent 152µs making 22 calls to UNIVERSAL::VERSION, avg 7µs/call
1002223µs $^H |= 0x20000
101 unless _PERL_LT_5_8_4;
1022288µs $^H{strictures_enable} = int $_[1];
103 }
104 }
10522272µs229µs _CAN_GOTO_VERSION ? goto &UNIVERSAL::VERSION : &UNIVERSAL::VERSION;
# spent 9µs making 22 calls to UNIVERSAL::VERSION, avg 409ns/call
106}
107
108our %extra_load_states;
109
110our $Smells_Like_VCS;
111
112
# spent 15.6ms (225µs+15.4) within strictures::import which was called 22 times, avg 709µs/call: # once (12µs+1.36ms) by JSON::Schema::Modern::Vocabulary::Core::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/Core.pm # once (12µs+1.22ms) by OpenAPI::Modern::BEGIN@12 at line 12 of OpenAPI/Modern.pm # once (14µs+1.20ms) by JSON::Schema::Modern::Vocabulary::Content::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/Content.pm # once (16µs+1.14ms) by JSON::Schema::Modern::Vocabulary::FormatAssertion::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/FormatAssertion.pm # once (16µs+1.12ms) by JSON::Schema::Modern::Utilities::BEGIN@10 at line 10 of JSON/Schema/Modern/Utilities.pm # once (13µs+1.05ms) by JSON::Schema::Modern::Annotation::BEGIN@11 at line 11 of JSON/Schema/Modern/Annotation.pm # once (11µs+902µs) by JSON::Schema::Modern::Vocabulary::Validation::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/Validation.pm # once (8µs+872µs) by JSON::Schema::Modern::Vocabulary::FormatAnnotation::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/FormatAnnotation.pm # once (9µs+782µs) by JSON::Schema::Modern::Document::BEGIN@11 at line 11 of JSON/Schema/Modern/Document.pm # once (9µs+693µs) by JSON::Schema::Modern::Vocabulary::Applicator::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/Applicator.pm # once (9µs+664µs) by JSON::Schema::Modern::Vocabulary::MetaData::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/MetaData.pm # once (8µs+633µs) by JSON::Schema::Modern::Vocabulary::Unevaluated::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/Unevaluated.pm # once (10µs+602µs) by JSON::Schema::Modern::Error::BEGIN@11 at line 11 of JSON/Schema/Modern/Error.pm # once (10µs+590µs) by JSON::Schema::Modern::Vocabulary::OpenAPI::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/OpenAPI.pm # once (7µs+592µs) by JSON::Schema::Modern::Document::OpenAPI::BEGIN@12 at line 12 of JSON/Schema/Modern/Document/OpenAPI.pm # once (9µs+583µs) by JSON::Schema::Modern::Vocabulary::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary.pm # once (11µs+561µs) by JSON::Schema::Modern::BEGIN@12 at line 12 of JSON/Schema/Modern.pm # once (6µs+562µs) by JSON::Schema::Modern::Result::BEGIN@11 at line 11 of JSON/Schema/Modern/Result.pm # once (13µs+74µs) by Data::Perl::Collection::Array::MooseLike::BEGIN@5 at line 5 of Data/Perl/Collection/Array/MooseLike.pm # once (9µs+66µs) by Data::Perl::Collection::Hash::MooseLike::BEGIN@5 at line 5 of Data/Perl/Collection/Hash/MooseLike.pm # once (8µs+59µs) by Data::Perl::Role::Collection::Hash::BEGIN@5 at line 5 of Data/Perl/Role/Collection/Hash.pm # once (5µs+48µs) by Data::Perl::Role::Collection::Array::BEGIN@5 at line 5 of Data/Perl/Role/Collection/Array.pm
sub import {
1132210µs my $class = shift;
1142229µs my %opts = @_ == 1 ? %{$_[0]} : @_;
1152259µs if (!exists $opts{version}) {
116 $opts{version}
117 = exists $^H{strictures_enable} ? delete $^H{strictures_enable}
118 : int $VERSION;
119 }
1202244µs $opts{file} = (caller)[1];
12122125µs2215.4ms $class->_enable(\%opts);
# spent 15.4ms making 22 calls to strictures::_enable, avg 699µs/call
122}
123
124
# spent 15.4ms (209µs+15.2) within strictures::_enable which was called 22 times, avg 699µs/call: # 22 times (209µs+15.2ms) by strictures::import at line 121, avg 699µs/call
sub _enable {
125227µs my ($class, $opts) = @_;
1262224µs my $version = $opts->{version};
127223µs $version = 'undef'
128 if !defined $version;
1292217µs my $method = "_enable_$version";
13022114µs2248µs if (!$class->can($method)) {
# spent 48µs making 22 calls to UNIVERSAL::can, avg 2µs/call
131 require Carp;
132 Carp::croak("Major version specified as $version - not supported!");
133 }
1342283µs2215.1ms $class->$method($opts);
# spent 14.9ms making 18 calls to strictures::_enable_2, avg 829µs/call # spent 202µs making 4 calls to strictures::_enable_1, avg 50µs/call
135}
136
137
# spent 202µs (37+165) within strictures::_enable_1 which was called 4 times, avg 50µs/call: # 4 times (37µs+165µs) by strictures::_enable at line 134, avg 50µs/call
sub _enable_1 {
13840s my ($class, $opts) = @_;
139418µs46µs strict->import;
# spent 6µs making 4 calls to strict::import, avg 2µs/call
14048µs4125µs warnings->import(FATAL => 'all');
# spent 125µs making 4 calls to warnings::import, avg 31µs/call
141
142414µs434µs if (_want_extra($opts->{file})) {
# spent 34µs making 4 calls to strictures::_want_extra, avg 8µs/call
143 _load_extras(qw(indirect multidimensional bareword::filehandles));
144 indirect->unimport(':fatal')
145 if $extra_load_states{indirect};
146 multidimensional->unimport
147 if $extra_load_states{multidimensional};
148 bareword::filehandles->unimport
149 if $extra_load_states{'bareword::filehandles'};
150 }
151}
152
15312µsour @V2_NONFATAL = grep { exists $warnings::Offsets{$_} } (
154 'exec', # not safe to catch
155 'recursion', # will be caught by other mechanisms
156 'internal', # not safe to catch
157 'malloc', # not safe to catch
158 'newline', # stat on nonexistent file with a newline in it
159 'experimental', # no reason for these to be fatal
160 'deprecated', # unfortunately can't make these fatal
161 'portable', # everything worked fine here, just may not elsewhere
162);
16310sour @V2_DISABLE = grep { exists $warnings::Offsets{$_} } (
164 'once' # triggers inconsistently, can't be fatalized
165);
166
167
# spent 14.9ms (419µs+14.5) within strictures::_enable_2 which was called 18 times, avg 829µs/call: # 18 times (419µs+14.5ms) by strictures::_enable at line 134, avg 829µs/call
sub _enable_2 {
168185µs my ($class, $opts) = @_;
1691859µs1819µs strict->import;
# spent 19µs making 18 calls to strict::import, avg 1µs/call
1701829µs18360µs warnings->import;
# spent 360µs making 18 calls to warnings::import, avg 20µs/call
1711826µs1812.3ms warnings->import(FATAL => @WARNING_CATEGORIES);
# spent 12.3ms making 18 calls to warnings::import, avg 682µs/call
1721855µs18305µs warnings->unimport(FATAL => @V2_NONFATAL);
# spent 305µs making 18 calls to warnings::unimport, avg 17µs/call
1731829µs181.12ms warnings->import(@V2_NONFATAL);
# spent 1.12ms making 18 calls to warnings::import, avg 62µs/call
1741824µs18128µs warnings->unimport(@V2_DISABLE);
# spent 128µs making 18 calls to warnings::unimport, avg 7µs/call
175
1761891µs18294µs if (_want_extra($opts->{file})) {
# spent 294µs making 18 calls to strictures::_want_extra, avg 16µs/call
177 _load_extras(qw(indirect multidimensional bareword::filehandles));
178 indirect->unimport(':fatal')
179 if $extra_load_states{indirect};
180 multidimensional->unimport
181 if $extra_load_states{multidimensional};
182 bareword::filehandles->unimport
183 if $extra_load_states{'bareword::filehandles'};
184 }
185}
186
187
# spent 53µs within strictures::_want_extra_env which was called 22 times, avg 2µs/call: # 22 times (53µs+0s) by strictures::_want_extra at line 200, avg 2µs/call
sub _want_extra_env {
1882218µs if (exists $ENV{PERL_STRICTURES_EXTRA}) {
189 if (_PERL_LT_5_8_4 and $ENV{PERL_STRICTURES_EXTRA}) {
190 die 'PERL_STRICTURES_EXTRA checks are not available on perls older'
191 . "than 5.8.4: please unset \$ENV{PERL_STRICTURES_EXTRA}\n";
192 }
193 return $ENV{PERL_STRICTURES_EXTRA} ? 1 : 0;
194 }
1952288µs return undef;
196}
197
198
# spent 328µs (228+100) within strictures::_want_extra which was called 22 times, avg 15µs/call: # 18 times (205µs+89µs) by strictures::_enable_2 at line 176, avg 16µs/call # 4 times (23µs+11µs) by strictures::_enable_1 at line 142, avg 8µs/call
sub _want_extra {
1992215µs my $file = shift;
2002239µs2253µs my $want_env = _want_extra_env();
# spent 53µs making 22 calls to strictures::_want_extra_env, avg 2µs/call
2012210µs return $want_env
202 if defined $want_env;
203 return (
20422166µs2247µs !_PERL_LT_5_8_4
# spent 47µs making 22 calls to strictures::CORE:match, avg 2µs/call
205 and $file =~ /^(?:t|xt|lib|blib)[\\\/]/
206 and defined $Smells_Like_VCS ? $Smells_Like_VCS
207 : ( $Smells_Like_VCS = !!(
208 -e '.git' || -e '.svn' || -e '.hg' || -e '.bzr'
209 || (-e '../../dist.ini'
210 && (-e '../../.git' || -e '../../.svn' || -e '../../.hg' || -e '../../.bzr' ))
211 ))
212 );
213}
214
215sub _load_extras {
216 my @extras = @_;
217 my @failed;
218 foreach my $mod (@extras) {
219 next
220 if exists $extra_load_states{$mod};
221
222 $extra_load_states{$mod} = eval "require $mod; 1;" or do {
223 push @failed, $mod;
224
225 #work around 5.8 require bug
226 (my $file = $mod) =~ s|::|/|g;
227 delete $INC{"${file}.pm"};
228 };
229 }
230
231 if (@failed) {
232 my $failed = join ' ', @failed;
233 my $extras = join ' ', @extras;
234 print STDERR <<EOE;
235strictures.pm extra testing active but couldn't load all modules. Missing were:
236
237 $failed
238
239Extra testing is auto-enabled in checkouts only, so if you're the author
240of a strictures-using module you need to run:
241
242 cpan $extras
243
244but these modules are not required by your users.
245EOE
246 }
247}
248
249115µs1;
250
251__END__
 
# spent 47µs within strictures::CORE:match which was called 22 times, avg 2µs/call: # 22 times (47µs+0s) by strictures::_want_extra at line 204, avg 2µs/call
sub strictures::CORE:match; # opcode