Filename | /Users/ether/.perlbrew/libs/36.0@std/lib/perl5/strictures.pm |
Statements | Executed 724 statements in 3.30ms |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
---|---|---|---|---|---|
18 | 1 | 1 | 389µs | 14.2ms | _enable_2 | strictures::
22 | 22 | 22 | 330µs | 498µs | VERSION | strictures::
22 | 22 | 22 | 257µs | 14.9ms | import | strictures::
22 | 1 | 1 | 179µs | 14.6ms | _enable | strictures::
22 | 2 | 1 | 138µs | 213µs | _want_extra | strictures::
1 | 1 | 1 | 57µs | 60µs | BEGIN@3 | strictures::
22 | 1 | 1 | 46µs | 46µs | _want_extra_env | strictures::
4 | 1 | 1 | 44µs | 255µs | _enable_1 | strictures::
22 | 1 | 1 | 29µs | 29µs | CORE:match (opcode) | strictures::
1 | 1 | 1 | 7µs | 20µs | BEGIN@97 | strictures::
1 | 1 | 1 | 6µs | 6µs | BEGIN@6 | strictures::
1 | 1 | 1 | 5µs | 38µs | BEGIN@4 | strictures::
0 | 0 | 0 | 0s | 0s | _load_extras | strictures::
Line | State ments |
Time on line |
Calls | Time in subs |
Code |
---|---|---|---|---|---|
1 | package strictures; | ||||
2 | |||||
3 | 2 | 31µs | 2 | 63µs | # spent 60µs (57+3) within strictures::BEGIN@3 which was called:
# once (57µs+3µs) by OpenAPI::Modern::BEGIN@12 at line 3 # spent 60µs making 1 call to strictures::BEGIN@3
# spent 3µs making 1 call to strict::import |
4 | 2 | 138µs | 2 | 71µs | # spent 38µs (5+33) within strictures::BEGIN@4 which was called:
# once (5µs+33µs) by OpenAPI::Modern::BEGIN@12 at line 4 # spent 38µs making 1 call to strictures::BEGIN@4
# spent 33µs making 1 call to warnings::import |
5 | |||||
6 | # spent 6µs within strictures::BEGIN@6 which was called:
# once (6µs+0s) by OpenAPI::Modern::BEGIN@12 at line 11 | ||||
7 | 1 | 3µ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. | ||||
10 | 1 | 4µs | *_CAN_GOTO_VERSION = ("$]" >= 5.010000) ? sub(){1} : sub(){0}; | ||
11 | 1 | 255µs | 1 | 6µs | } # spent 6µs making 1 call to strictures::BEGIN@6 |
12 | |||||
13 | 1 | 0s | our $VERSION = '2.000006'; | ||
14 | 1 | 1µs | $VERSION =~ tr/_//d; | ||
15 | |||||
16 | 1 | 24µs | our @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 498µs (330+168) within strictures::VERSION which was called 22 times, avg 23µs/call:
# once (15µs+36µs) by JSON::Schema::Modern::Vocabulary::Applicator::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/Applicator.pm
# once (37µs+7µs) by JSON::Schema::Modern::Error::BEGIN@11 at line 11 of JSON/Schema/Modern/Error.pm
# once (18µs+15µs) by Data::Perl::Collection::Array::MooseLike::BEGIN@5 at line 5 of Data/Perl/Collection/Array/MooseLike.pm
# once (22µs+10µs) by OpenAPI::Modern::BEGIN@12 at line 12 of OpenAPI/Modern.pm
# once (20µs+9µs) by Data::Perl::Collection::Hash::MooseLike::BEGIN@5 at line 5 of Data/Perl/Collection/Hash/MooseLike.pm
# once (17µs+8µs) by Data::Perl::Role::Collection::Array::BEGIN@5 at line 5 of Data/Perl/Role/Collection/Array.pm
# once (18µs+7µs) by JSON::Schema::Modern::Vocabulary::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary.pm
# once (19µs+6µs) by JSON::Schema::Modern::Vocabulary::Validation::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/Validation.pm
# once (16µs+6µs) by JSON::Schema::Modern::BEGIN@12 at line 12 of JSON/Schema/Modern.pm
# once (14µs+6µs) by Data::Perl::Role::Collection::Hash::BEGIN@5 at line 5 of Data/Perl/Role/Collection/Hash.pm
# once (13µs+6µs) by JSON::Schema::Modern::Document::OpenAPI::BEGIN@12 at line 12 of JSON/Schema/Modern/Document/OpenAPI.pm
# once (11µs+7µs) by JSON::Schema::Modern::Vocabulary::OpenAPI::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/OpenAPI.pm
# once (12µs+6µs) by JSON::Schema::Modern::Vocabulary::MetaData::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/MetaData.pm
# once (11µs+6µs) by JSON::Schema::Modern::Result::BEGIN@11 at line 11 of JSON/Schema/Modern/Result.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::Vocabulary::FormatAnnotation::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/FormatAnnotation.pm
# once (11µs+5µs) by JSON::Schema::Modern::Document::BEGIN@11 at line 11 of JSON/Schema/Modern/Document.pm
# once (11µs+4µs) by JSON::Schema::Modern::Vocabulary::Core::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/Core.pm
# once (11µs+4µs) by JSON::Schema::Modern::Annotation::BEGIN@11 at line 11 of JSON/Schema/Modern/Annotation.pm
# once (11µs+4µs) by JSON::Schema::Modern::Utilities::BEGIN@10 at line 10 of JSON/Schema/Modern/Utilities.pm
# once (10µs+4µs) by JSON::Schema::Modern::Vocabulary::FormatAssertion::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/FormatAssertion.pm
# once (9µs+4µs) by JSON::Schema::Modern::Vocabulary::Content::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/Content.pm | ||||
96 | { | ||||
97 | 24 | 1.01ms | 2 | 33µs | # spent 20µs (7+13) within strictures::BEGIN@97 which was called:
# once (7µs+13µs) by OpenAPI::Modern::BEGIN@12 at line 97 # spent 20µs making 1 call to strictures::BEGIN@97
# spent 13µs making 1 call to warnings::unimport |
98 | 22 | 10µs | local $@; | ||
99 | 66 | 338µs | 22 | 168µs | if (defined $_[1] && eval { &UNIVERSAL::VERSION; 1}) { # spent 168µs making 22 calls to UNIVERSAL::VERSION, avg 8µs/call |
100 | 22 | 27µs | $^H |= 0x20000 | ||
101 | unless _PERL_LT_5_8_4; | ||||
102 | 22 | 58µs | $^H{strictures_enable} = int $_[1]; | ||
103 | } | ||||
104 | } | ||||
105 | 22 | 296µs | 22 | 10µs | _CAN_GOTO_VERSION ? goto &UNIVERSAL::VERSION : &UNIVERSAL::VERSION; # spent 10µs making 22 calls to UNIVERSAL::VERSION, avg 455ns/call |
106 | } | ||||
107 | |||||
108 | our %extra_load_states; | ||||
109 | |||||
110 | our $Smells_Like_VCS; | ||||
111 | |||||
112 | # spent 14.9ms (257µs+14.6) within strictures::import which was called 22 times, avg 676µs/call:
# once (15µs+1.36ms) by JSON::Schema::Modern::Error::BEGIN@11 at line 11 of JSON/Schema/Modern/Error.pm
# once (12µs+1.16ms) by OpenAPI::Modern::BEGIN@12 at line 12 of OpenAPI/Modern.pm
# once (20µs+1.14ms) by JSON::Schema::Modern::BEGIN@12 at line 12 of JSON/Schema/Modern.pm
# once (15µs+1.01ms) by JSON::Schema::Modern::Vocabulary::Validation::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/Validation.pm
# once (11µs+951µs) by JSON::Schema::Modern::Vocabulary::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary.pm
# once (9µs+932µs) by JSON::Schema::Modern::Document::BEGIN@11 at line 11 of JSON/Schema/Modern/Document.pm
# once (11µs+914µs) by JSON::Schema::Modern::Document::OpenAPI::BEGIN@12 at line 12 of JSON/Schema/Modern/Document/OpenAPI.pm
# once (10µs+779µs) by JSON::Schema::Modern::Vocabulary::MetaData::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/MetaData.pm
# once (9µs+748µs) by JSON::Schema::Modern::Vocabulary::FormatAssertion::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/FormatAssertion.pm
# once (8µs+652µs) by JSON::Schema::Modern::Utilities::BEGIN@10 at line 10 of JSON/Schema/Modern/Utilities.pm
# once (6µs+643µs) by JSON::Schema::Modern::Vocabulary::FormatAnnotation::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/FormatAnnotation.pm
# once (9µs+637µs) by JSON::Schema::Modern::Result::BEGIN@11 at line 11 of JSON/Schema/Modern/Result.pm
# once (42µs+571µs) by JSON::Schema::Modern::Vocabulary::Applicator::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/Applicator.pm
# once (8µs+601µs) by JSON::Schema::Modern::Annotation::BEGIN@11 at line 11 of JSON/Schema/Modern/Annotation.pm
# once (8µs+591µs) by JSON::Schema::Modern::Vocabulary::Unevaluated::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/Unevaluated.pm
# once (7µs+569µs) by JSON::Schema::Modern::Vocabulary::OpenAPI::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/OpenAPI.pm
# once (7µs+538µs) by JSON::Schema::Modern::Vocabulary::Content::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/Content.pm
# once (9µs+529µs) by JSON::Schema::Modern::Vocabulary::Core::BEGIN@11 at line 11 of JSON/Schema/Modern/Vocabulary/Core.pm
# once (10µs+89µs) by Data::Perl::Role::Collection::Array::BEGIN@5 at line 5 of Data/Perl/Role/Collection/Array.pm
# once (11µs+84µs) by Data::Perl::Collection::Array::MooseLike::BEGIN@5 at line 5 of Data/Perl/Collection/Array/MooseLike.pm
# once (13µs+81µs) by Data::Perl::Collection::Hash::MooseLike::BEGIN@5 at line 5 of Data/Perl/Collection/Hash/MooseLike.pm
# once (7µs+47µs) by Data::Perl::Role::Collection::Hash::BEGIN@5 at line 5 of Data/Perl/Role/Collection/Hash.pm | ||||
113 | 22 | 8µs | my $class = shift; | ||
114 | 22 | 31µs | my %opts = @_ == 1 ? %{$_[0]} : @_; | ||
115 | 22 | 53µs | if (!exists $opts{version}) { | ||
116 | $opts{version} | ||||
117 | = exists $^H{strictures_enable} ? delete $^H{strictures_enable} | ||||
118 | : int $VERSION; | ||||
119 | } | ||||
120 | 22 | 84µs | $opts{file} = (caller)[1]; | ||
121 | 22 | 137µs | 22 | 14.6ms | $class->_enable(\%opts); # spent 14.6ms making 22 calls to strictures::_enable, avg 665µs/call |
122 | } | ||||
123 | |||||
124 | # spent 14.6ms (179µs+14.4) within strictures::_enable which was called 22 times, avg 665µs/call:
# 22 times (179µs+14.4ms) by strictures::import at line 121, avg 665µs/call | ||||
125 | 22 | 9µs | my ($class, $opts) = @_; | ||
126 | 22 | 16µs | my $version = $opts->{version}; | ||
127 | 22 | 5µs | $version = 'undef' | ||
128 | if !defined $version; | ||||
129 | 22 | 12µs | my $method = "_enable_$version"; | ||
130 | 22 | 97µs | 22 | 36µs | if (!$class->can($method)) { # spent 36µ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 | } | ||||
134 | 22 | 75µs | 22 | 14.4ms | $class->$method($opts); # spent 14.2ms making 18 calls to strictures::_enable_2, avg 786µs/call
# spent 255µs making 4 calls to strictures::_enable_1, avg 64µs/call |
135 | } | ||||
136 | |||||
137 | # spent 255µs (44+211) within strictures::_enable_1 which was called 4 times, avg 64µs/call:
# 4 times (44µs+211µs) by strictures::_enable at line 134, avg 64µs/call | ||||
138 | 4 | 2µs | my ($class, $opts) = @_; | ||
139 | 4 | 20µs | 4 | 8µs | strict->import; # spent 8µs making 4 calls to strict::import, avg 2µs/call |
140 | 4 | 10µs | 4 | 162µs | warnings->import(FATAL => 'all'); # spent 162µs making 4 calls to warnings::import, avg 40µs/call |
141 | |||||
142 | 4 | 17µs | 4 | 41µs | if (_want_extra($opts->{file})) { # spent 41µs making 4 calls to strictures::_want_extra, avg 10µ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 | |||||
153 | 1 | 1µs | our @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 | ); | ||||
163 | 1 | 0s | our @V2_DISABLE = grep { exists $warnings::Offsets{$_} } ( | ||
164 | 'once' # triggers inconsistently, can't be fatalized | ||||
165 | ); | ||||
166 | |||||
167 | # spent 14.2ms (389µs+13.8) within strictures::_enable_2 which was called 18 times, avg 786µs/call:
# 18 times (389µs+13.8ms) by strictures::_enable at line 134, avg 786µs/call | ||||
168 | 18 | 4µs | my ($class, $opts) = @_; | ||
169 | 18 | 86µs | 18 | 18µs | strict->import; # spent 18µs making 18 calls to strict::import, avg 1µs/call |
170 | 18 | 19µs | 18 | 331µs | warnings->import; # spent 331µs making 18 calls to warnings::import, avg 18µs/call |
171 | 18 | 41µs | 18 | 11.8ms | warnings->import(FATAL => @WARNING_CATEGORIES); # spent 11.8ms making 18 calls to warnings::import, avg 654µs/call |
172 | 18 | 36µs | 18 | 262µs | warnings->unimport(FATAL => @V2_NONFATAL); # spent 262µs making 18 calls to warnings::unimport, avg 15µs/call |
173 | 18 | 19µs | 18 | 1.12ms | warnings->import(@V2_NONFATAL); # spent 1.12ms making 18 calls to warnings::import, avg 62µs/call |
174 | 18 | 19µs | 18 | 88µs | warnings->unimport(@V2_DISABLE); # spent 88µs making 18 calls to warnings::unimport, avg 5µs/call |
175 | |||||
176 | 18 | 71µs | 18 | 172µs | if (_want_extra($opts->{file})) { # spent 172µs making 18 calls to strictures::_want_extra, avg 10µ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 46µs within strictures::_want_extra_env which was called 22 times, avg 2µs/call:
# 22 times (46µs+0s) by strictures::_want_extra at line 200, avg 2µs/call | ||||
188 | 22 | 19µ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 | } | ||||
195 | 22 | 42µs | return undef; | ||
196 | } | ||||
197 | |||||
198 | sub _want_extra { | ||||
199 | 22 | 7µs | my $file = shift; | ||
200 | 22 | 29µs | 22 | 46µs | my $want_env = _want_extra_env(); # spent 46µs making 22 calls to strictures::_want_extra_env, avg 2µs/call |
201 | 22 | 11µs | return $want_env | ||
202 | if defined $want_env; | ||||
203 | return ( | ||||
204 | 22 | 116µs | 22 | 29µs | !_PERL_LT_5_8_4 # spent 29µs making 22 calls to strictures::CORE:match, avg 1µ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 | |||||
215 | sub _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; | ||||
235 | strictures.pm extra testing active but couldn't load all modules. Missing were: | ||||
236 | |||||
237 | $failed | ||||
238 | |||||
239 | Extra testing is auto-enabled in checkouts only, so if you're the author | ||||
240 | of a strictures-using module you need to run: | ||||
241 | |||||
242 | cpan $extras | ||||
243 | |||||
244 | but these modules are not required by your users. | ||||
245 | EOE | ||||
246 | } | ||||
247 | } | ||||
248 | |||||
249 | 1 | 11µs | 1; | ||
250 | |||||
251 | __END__ | ||||
# spent 29µs within strictures::CORE:match which was called 22 times, avg 1µs/call:
# 22 times (29µs+0s) by strictures::_want_extra at line 204, avg 1µs/call |