Filename | /Users/timbo/perl5/perlbrew/perls/perl-5.18.2/lib/site_perl/5.18.2/Readonly.pm |
Statements | Executed 14855 statements in 17.8ms |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
---|---|---|---|---|---|
423 | 423 | 151 | 11.2ms | 21.2ms | Scalar | Readonly::
157 | 83 | 44 | 6.13ms | 9.33ms | Hash (recurses: max depth 1, inclusive time 4.75ms) | Readonly::
212 | 49 | 36 | 2.41ms | 4.79ms | Array (recurses: max depth 1, inclusive time 343µs) | Readonly::
792 | 3 | 1 | 2.15ms | 2.39ms | _is_badtype | Readonly::
423 | 1 | 1 | 346µs | 346µs | is_sv_readonly | Readonly::
792 | 1 | 1 | 232µs | 232µs | CORE:subst (opcode) | Readonly::
1 | 1 | 1 | 15µs | 15µs | BEGIN@2 | Readonly::
1 | 1 | 1 | 7µs | 19µs | BEGIN@3 | Readonly::
1 | 1 | 1 | 7µs | 22µs | BEGIN@7 | Readonly::
1 | 1 | 1 | 6µs | 23µs | BEGIN@24 | Readonly::
1 | 1 | 1 | 6µs | 59µs | BEGIN@8 | Readonly::
1 | 1 | 1 | 6µs | 40µs | BEGIN@27 | Readonly::
0 | 0 | 0 | 0s | 0s | Array1 | Readonly::
0 | 0 | 0 | 0s | 0s | Hash1 | Readonly::
0 | 0 | 0 | 0s | 0s | Scalar1 | Readonly::
0 | 0 | 0 | 0s | 0s | croak | Readonly::
0 | 0 | 0 | 0s | 0s | make_sv_readonly | Readonly::
Line | State ments |
Time on line |
Calls | Time in subs |
Code |
---|---|---|---|---|---|
1 | package Readonly; | ||||
2 | 2 | 41µs | 1 | 15µs | # spent 15µs within Readonly::BEGIN@2 which was called:
# once (15µs+0s) by Perl::Critic::Command::BEGIN@15 at line 2 # spent 15µs making 1 call to Readonly::BEGIN@2 |
3 | 2 | 20µs | 2 | 31µs | # spent 19µs (7+12) within Readonly::BEGIN@3 which was called:
# once (7µs+12µs) by Perl::Critic::Command::BEGIN@15 at line 3 # spent 19µs making 1 call to Readonly::BEGIN@3
# spent 12µs making 1 call to strict::import |
4 | |||||
5 | #use warnings; | ||||
6 | #no warnings 'uninitialized'; | ||||
7 | 2 | 22µs | 2 | 36µs | # spent 22µs (7+15) within Readonly::BEGIN@7 which was called:
# once (7µs+15µs) by Perl::Critic::Command::BEGIN@15 at line 7 # spent 22µs making 1 call to Readonly::BEGIN@7
# spent 15µs making 1 call to Exporter::import |
8 | 2 | 94µs | 2 | 111µs | # spent 59µs (6+52) within Readonly::BEGIN@8 which was called:
# once (6µs+52µs) by Perl::Critic::Command::BEGIN@15 at line 8 # spent 59µs making 1 call to Readonly::BEGIN@8
# spent 52µs making 1 call to vars::import |
9 | 1 | 5µs | push @ISA, 'Exporter'; | ||
10 | 1 | 400ns | push @EXPORT, qw/Readonly/; | ||
11 | 1 | 1µs | push @EXPORT_OK, qw/Scalar Array Hash Scalar1 Array1 Hash1/; | ||
12 | 1 | 200ns | our $VERSION = '1.04'; | ||
13 | |||||
14 | # Autocroak (Thanks, MJD) | ||||
15 | # Only load Carp.pm if module is croaking. | ||||
16 | sub croak { | ||||
17 | require Carp; | ||||
18 | goto &Carp::croak; | ||||
19 | } | ||||
20 | |||||
21 | # These functions may be overridden by Readonly::XS, if installed. | ||||
22 | 423 | 915µs | # spent 346µs within Readonly::is_sv_readonly which was called 423 times, avg 817ns/call:
# 423 times (346µs+0s) by Readonly::Scalar at line 101, avg 817ns/call | ||
23 | sub make_sv_readonly ($) { die "make_sv_readonly called but not overridden" } | ||||
24 | 2 | 22µs | 2 | 39µs | # spent 23µs (6+16) within Readonly::BEGIN@24 which was called:
# once (6µs+16µs) by Perl::Critic::Command::BEGIN@15 at line 24 # spent 23µs making 1 call to Readonly::BEGIN@24
# spent 16µs making 1 call to vars::import |
25 | |||||
26 | # Common error messages, or portions thereof | ||||
27 | 2 | 1.09ms | 2 | 74µs | # spent 40µs (6+34) within Readonly::BEGIN@27 which was called:
# once (6µs+34µs) by Perl::Critic::Command::BEGIN@15 at line 27 # spent 40µs making 1 call to Readonly::BEGIN@27
# spent 34µs making 1 call to vars::import |
28 | 1 | 200ns | $MODIFY = 'Modification of a read-only value attempted'; | ||
29 | 1 | 100ns | $REASSIGN = 'Attempt to reassign a readonly'; | ||
30 | 1 | 200ns | $ODDHASH = 'May not store an odd number of values in a hash'; | ||
31 | |||||
32 | # See if we can use the XS stuff. | ||||
33 | 1 | 28µs | eval 'use Readonly::XS'; # spent 54µs executing statements in string eval # includes 43µs spent executing 1 call to 1 sub defined therein. | ||
34 | |||||
35 | # Include specialized tie modules | ||||
36 | 1 | 156µs | require Readonly::Array; | ||
37 | 1 | 306µs | require Readonly::Hash; | ||
38 | 1 | 191µs | require Readonly::Scalar; | ||
39 | |||||
40 | # Predeclare the following, so we can use them recursively | ||||
41 | sub Scalar ($$); | ||||
42 | sub Array (\@;@); | ||||
43 | sub Hash (\%;@); | ||||
44 | |||||
45 | # Returns true if a string begins with "Readonly::" | ||||
46 | # Used to prevent reassignment of Readonly variables. | ||||
47 | # spent 2.39ms (2.15+232µs) within Readonly::_is_badtype which was called 792 times, avg 3µs/call:
# 423 times (1.18ms+130µs) by Readonly::Scalar at line 102, avg 3µs/call
# 212 times (570µs+63µs) by Readonly::Array at line 131, avg 3µs/call
# 157 times (402µs+39µs) by Readonly::Hash at line 149, avg 3µs/call | ||||
48 | 792 | 175µs | my $type = $_[0]; | ||
49 | 792 | 1.45ms | 792 | 232µs | return lc $type if $type =~ s/^Readonly:://; # spent 232µs making 792 calls to Readonly::CORE:subst, avg 293ns/call |
50 | 792 | 1.12ms | return; | ||
51 | } | ||||
52 | |||||
53 | # Shallow Readonly scalar | ||||
54 | sub Scalar1 ($$) { | ||||
55 | croak "$REASSIGN scalar" if is_sv_readonly $_[0]; | ||||
56 | my $badtype = _is_badtype(ref tied $_[0]); | ||||
57 | croak "$REASSIGN $badtype" if $badtype; | ||||
58 | |||||
59 | # xs method: flag scalar as readonly | ||||
60 | if ($XSokay) { | ||||
61 | $_[0] = $_[1]; | ||||
62 | make_sv_readonly $_[0]; | ||||
63 | return; | ||||
64 | } | ||||
65 | |||||
66 | # pure-perl method: tied scalar | ||||
67 | my $tieobj = eval { tie $_[0], 'Readonly::Scalar', $_[1] }; | ||||
68 | if ($@) { | ||||
69 | croak "$REASSIGN scalar" if substr($@, 0, 43) eq $MODIFY; | ||||
70 | die $@; # some other error? | ||||
71 | } | ||||
72 | return $tieobj; | ||||
73 | } | ||||
74 | |||||
75 | # Shallow Readonly array | ||||
76 | sub Array1 (\@;@) { | ||||
77 | my $badtype = _is_badtype(ref tied $_[0]); | ||||
78 | croak "$REASSIGN $badtype" if $badtype; | ||||
79 | my $aref = shift; | ||||
80 | return tie @$aref, 'Readonly::Array', @_; | ||||
81 | } | ||||
82 | |||||
83 | # Shallow Readonly hash | ||||
84 | sub Hash1 (\%;@) { | ||||
85 | my $badtype = _is_badtype(ref tied $_[0]); | ||||
86 | croak "$REASSIGN $badtype" if $badtype; | ||||
87 | my $href = shift; | ||||
88 | |||||
89 | # If only one value, and it's a hashref, expand it | ||||
90 | if (@_ == 1 && ref $_[0] eq 'HASH') { | ||||
91 | return tie %$href, 'Readonly::Hash', %{$_[0]}; | ||||
92 | } | ||||
93 | |||||
94 | # otherwise, must have an even number of values | ||||
95 | croak $ODDHASH unless (@_ % 2 == 0); | ||||
96 | return tie %$href, 'Readonly::Hash', @_; | ||||
97 | } | ||||
98 | |||||
99 | # Deep Readonly scalar | ||||
100 | # spent 21.2ms (11.2+9.97) within Readonly::Scalar which was called 423 times, avg 50µs/call:
# once (2.90ms+34µs) by Module::Pluggable::Object::_require at line 25 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitInterpolationOfLiterals.pm
# once (16µs+2.84ms) by Module::Pluggable::Object::_require at line 25 of Perl/Critic/Policy/BuiltinFunctions/ProhibitStringyEval.pm
# once (2.81ms+23µs) by Module::Pluggable::Object::_require at line 25 of Perl/Critic/Policy/RegularExpressions/ProhibitEscapedMetacharacters.pm
# once (21µs+54µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/InputOutput/ProhibitExplicitStdin.pm
# once (23µs+50µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/InputOutput/ProhibitBarewordFileHandles.pm
# once (23µs+43µs) by Module::Pluggable::Object::_require at line 25 of Perl/Critic/Policy/ErrorHandling/RequireCarping.pm
# once (39µs+20µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 183 of Perl/Critic/Utils.pm
# once (19µs+40µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/InputOutput/ProhibitInteractiveTest.pm
# once (19µs+40µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/InputOutput/ProhibitOneArgSelect.pm
# once (18µs+40µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/InputOutput/ProhibitJoinedReadline.pm
# once (17µs+38µs) by Module::Pluggable::Object::_require at line 28 of Perl/Critic/Policy/CodeLayout/RequireTidyCode.pm
# once (30µs+24µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/InputOutput/ProhibitExplicitStdin.pm
# once (16µs+37µs) by Module::Pluggable::Object::_require at line 28 of Perl/Critic/Policy/ValuesAndExpressions/RequireInterpolationOfMetachars.pm
# once (18µs+35µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/Documentation/RequirePodSections.pm
# once (14µs+39µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/Documentation/RequirePodAtEnd.pm
# once (24µs+29µs) by Module::Pluggable::Object::_require at line 30 of Perl/Critic/Policy/CodeLayout/ProhibitParensWithBuiltins.pm
# once (17µs+34µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/ControlStructures/ProhibitNegativeExpressionsInUnlessAndUntilConditions.pm
# once (15µs+36µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/ValuesAndExpressions/RequireNumberSeparators.pm
# once (16µs+36µs) by Module::Pluggable::Object::_require at line 40 of Perl/Critic/Policy/Documentation/PodSpelling.pm
# once (24µs+25µs) by Module::Pluggable::Object::_require at line 25 of Perl/Critic/Policy/Miscellanea/ProhibitUselessNoCritic.pm
# once (17µs+33µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/Subroutines/RequireFinalReturn.pm
# once (17µs+33µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/NamingConventions/ProhibitAmbiguousNames.pm
# once (14µs+35µs) by Module::Pluggable::Object::_require at line 90 of Perl/Critic/Policy/NamingConventions/Capitalization.pm
# once (17µs+32µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/RegularExpressions/ProhibitSingleCharAlternation.pm
# once (15µs+33µs) by Module::Pluggable::Object::_require at line 25 of Perl/Critic/Policy/InputOutput/ProhibitReadlineInForLoop.pm
# once (24µs+24µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/InputOutput/ProhibitBarewordFileHandles.pm
# once (16µs+32µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/RegularExpressions/ProhibitEscapedMetacharacters.pm
# once (15µs+32µs) by Module::Pluggable::Object::_require at line 28 of Perl/Critic/Policy/InputOutput/ProhibitTwoArgOpen.pm
# once (15µs+32µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/BuiltinFunctions/ProhibitStringyEval.pm
# once (13µs+34µs) by Module::Pluggable::Object::_require at line 47 of Perl/Critic/Policy/Documentation/RequirePodSections.pm
# once (23µs+24µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/InputOutput/ProhibitBacktickOperators.pm
# once (23µs+23µs) by Module::Pluggable::Object::_require at line 27 of Perl/Critic/Policy/CodeLayout/RequireTidyCode.pm
# once (24µs+22µs) by Module::Pluggable::Object::_require at line 38 of Perl/Critic/Policy/Documentation/PodSpelling.pm
# once (14µs+31µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/ControlStructures/ProhibitUnlessBlocks.pm
# once (14µs+31µs) by Module::Pluggable::Object::_require at line 25 of Perl/Critic/Policy/TestingAndDebugging/ProhibitNoStrict.pm
# once (16µs+29µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/Miscellanea/ProhibitTies.pm
# once (14µs+31µs) by Module::Pluggable::Object::_require at line 25 of Perl/Critic/Policy/Modules/RequireVersionVar.pm
# once (14µs+31µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitImplicitNewlines.pm
# once (23µs+22µs) by Perl::Critic::PolicyFactory::BEGIN@27 at line 26 of Perl/Critic/PolicyConfig.pm
# once (14µs+30µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/ValuesAndExpressions/RequireQuotedHeredocTerminator.pm
# once (22µs+22µs) by Perl::Critic::Command::BEGIN@27 at line 35 of Perl/Critic/Violation.pm
# once (14µs+30µs) by Module::Pluggable::Object::_require at line 28 of Perl/Critic/Policy/RegularExpressions/ProhibitComplexRegexes.pm
# once (14µs+30µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/ValuesAndExpressions/RequireUpperCaseHeredocTerminator.pm
# once (14µs+30µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/TestingAndDebugging/ProhibitNoWarnings.pm
# once (14µs+30µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitConstantPragma.pm
# once (15µs+29µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/TestingAndDebugging/RequireUseWarnings.pm
# once (14µs+30µs) by Module::Pluggable::Object::_require at line 28 of Perl/Critic/Policy/RegularExpressions/ProhibitEnumeratedClasses.pm
# once (14µs+30µs) by Module::Pluggable::Object::_require at line 57 of Perl/Critic/Policy/ControlStructures/ProhibitMutatingListFunctions.pm
# once (14µs+30µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/CodeLayout/RequireTrailingCommas.pm
# once (22µs+21µs) by Module::Pluggable::Object::_require at line 27 of Perl/Critic/Policy/ValuesAndExpressions/RequireInterpolationOfMetachars.pm
# once (14µs+30µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/ClassHierarchies/ProhibitAutoloading.pm
# once (14µs+30µs) by Module::Pluggable::Object::_require at line 27 of Perl/Critic/Policy/BuiltinFunctions/RequireBlockGrep.pm
# once (14µs+30µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/Variables/ProhibitMatchVars.pm
# once (14µs+30µs) by Module::Pluggable::Object::_require at line 29 of Perl/Critic/Policy/Variables/ProhibitPackageVars.pm
# once (14µs+29µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/Subroutines/ProhibitAmpersandSigils.pm
# once (14µs+30µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitCommaSeparatedStatements.pm
# once (14µs+29µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/Variables/RequireInitializationForLocalVars.pm
# once (15µs+29µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/Variables/ProhibitLocalVars.pm
# once (14µs+30µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitEscapedCharacters.pm
# once (14µs+30µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/BuiltinFunctions/ProhibitLvalueSubstr.pm
# once (14µs+30µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/BuiltinFunctions/RequireSimpleSortBlock.pm
# once (14µs+30µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/Variables/RequireNegativeIndices.pm
# once (13µs+30µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/BuiltinFunctions/ProhibitBooleanGrep.pm
# once (14µs+29µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/BuiltinFunctions/ProhibitReverseSortBlock.pm
# once (14µs+29µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitEmptyQuotes.pm
# once (14µs+29µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitLeadingZeros.pm
# once (13µs+29µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/ClassHierarchies/ProhibitExplicitISA.pm
# once (13µs+29µs) by Module::Pluggable::Object::_require at line 25 of Perl/Critic/Policy/InputOutput/RequireCheckedSyscalls.pm
# once (14µs+29µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/Variables/RequireLexicalLoopIterators.pm
# once (13µs+29µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/BuiltinFunctions/ProhibitSleepViaSelect.pm
# once (13µs+29µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/BuiltinFunctions/ProhibitComplexMappings.pm
# once (13µs+29µs) by Module::Pluggable::Object::_require at line 27 of Perl/Critic/Policy/RegularExpressions/ProhibitFixedStringMatches.pm
# once (13µs+29µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/ClassHierarchies/ProhibitOneArgBless.pm
# once (14µs+29µs) by Module::Pluggable::Object::_require at line 29 of Perl/Critic/Policy/Variables/ProhibitPunctuationVars.pm
# once (13µs+29µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/TestingAndDebugging/RequireUseStrict.pm
# once (14µs+29µs) by Module::Pluggable::Object::_require at line 28 of Perl/Critic/Policy/InputOutput/RequireBriefOpen.pm
# once (13µs+29µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/ControlStructures/ProhibitCStyleForLoops.pm
# once (13µs+29µs) by Module::Pluggable::Object::_require at line 27 of Perl/Critic/Policy/RegularExpressions/ProhibitUnusualDelimiters.pm
# once (13µs+29µs) by Module::Pluggable::Object::_require at line 25 of Perl/Critic/Policy/RegularExpressions/RequireDotMatchAnything.pm
# once (13µs+28µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/References/ProhibitDoubleSigils.pm
# once (13µs+29µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/RegularExpressions/RequireExtendedFormatting.pm
# once (13µs+28µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/Subroutines/ProhibitSubroutinePrototypes.pm
# once (13µs+29µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/BuiltinFunctions/RequireBlockMap.pm
# once (13µs+28µs) by Module::Pluggable::Object::_require at line 27 of Perl/Critic/Policy/RegularExpressions/RequireBracesForMultiline.pm
# once (13µs+28µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/CodeLayout/ProhibitHardTabs.pm
# once (22µs+20µs) by Module::Pluggable::Object::_require at line 40 of Perl/Critic/Policy/NamingConventions/Capitalization.pm
# once (13µs+28µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/Subroutines/ProhibitExplicitReturnUndef.pm
# once (13µs+28µs) by Module::Pluggable::Object::_require at line 39 of Perl/Critic/Policy/RegularExpressions/ProhibitUnusedCapture.pm
# once (13µs+28µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/TestingAndDebugging/ProhibitProlongedStrictureOverride.pm
# once (13µs+28µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/ControlStructures/ProhibitCascadingIfElse.pm
# once (13µs+28µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/BuiltinFunctions/RequireGlobFunction.pm
# once (13µs+28µs) by Module::Pluggable::Object::_require at line 29 of Perl/Critic/Policy/Variables/RequireLocalizedPunctuationVars.pm
# once (13µs+28µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/ControlStructures/ProhibitUntilBlocks.pm
# once (13µs+28µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitNoisyQuotes.pm
# once (13µs+28µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/RegularExpressions/RequireLineBoundaryMatching.pm
# once (13µs+28µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/Miscellanea/ProhibitFormats.pm
# once (13µs+28µs) by Module::Pluggable::Object::_require at line 27 of Perl/Critic/Policy/RegularExpressions/ProhibitCaptureWithoutTest.pm
# once (13µs+27µs) by Module::Pluggable::Object::_require at line 44 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitMixedBooleanOperators.pm
# once (13µs+28µs) by Module::Pluggable::Object::_require at line 37 of Perl/Critic/Policy/Subroutines/RequireArgUnpacking.pm
# once (13µs+28µs) by Module::Pluggable::Object::_require at line 32 of Perl/Critic/Policy/Subroutines/ProhibitManyArgs.pm
# once (13µs+27µs) by Module::Pluggable::Object::_require at line 27 of Perl/Critic/Policy/Subroutines/ProhibitBuiltinHomonyms.pm
# once (19µs+20µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/InputOutput/ProhibitJoinedReadline.pm
# once (13µs+27µs) by Module::Pluggable::Object::_require at line 32 of Perl/Critic/Policy/Objects/ProhibitIndirectSyntax.pm
# once (13µs+27µs) by Module::Pluggable::Object::_require at line 27 of Perl/Critic/Policy/InputOutput/RequireBracedFileHandleWithPrint.pm
# once (19µs+20µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/InputOutput/ProhibitOneArgSelect.pm
# once (19µs+20µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/InputOutput/ProhibitInteractiveTest.pm
# once (23µs+15µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/ControlStructures/ProhibitDeepNests.pm
# once (23µs+15µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/Variables/RequireInitializationForLocalVars.pm
# once (14µs+23µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/Documentation/RequirePodAtEnd.pm
# once (19µs+18µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/ValuesAndExpressions/RequireNumberSeparators.pm
# once (18µs+17µs) by Perl::Critic::BEGIN@24 at line 43 of Perl/Critic/Config.pm
# once (16µs+18µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/Miscellanea/ProhibitUselessNoCritic.pm
# once (19µs+16µs) by Perl::Critic::Config::BEGIN@20 at line 103 of Perl/Critic/Exception/AggregateConfiguration.pm
# once (16µs+18µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/InputOutput/ProhibitBacktickOperators.pm
# once (18µs+17µs) by Module::Pluggable::Object::_require at line 27 of Perl/Critic/Policy/CodeLayout/ProhibitTrailingWhitespace.pm
# once (11µs+23µs) by Module::Pluggable::Object::_require at line 36 of Perl/Critic/Policy/ErrorHandling/RequireCheckingReturnValueOfEval.pm
# once (16µs+17µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/InputOutput/ProhibitReadlineInForLoop.pm
# once (15µs+18µs) by Module::Pluggable::Object::_require at line 32 of Perl/Critic/Policy/CodeLayout/ProhibitParensWithBuiltins.pm
# once (16µs+16µs) by Module::Pluggable::Object::_require at line 28 of Perl/Critic/Policy/Documentation/RequirePodLinksIncludeText.pm
# once (16µs+17µs) by Module::Pluggable::Object::_require at line 28 of Perl/Critic/Policy/Modules/ProhibitEvilModules.pm
# once (16µs+17µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/InputOutput/ProhibitBacktickOperators.pm
# once (16µs+16µs) by base::import at line 54 of Perl/Critic/Policy.pm
# once (16µs+16µs) by Module::Pluggable::Object::_require at line 31 of Perl/Critic/Policy/RegularExpressions/ProhibitUnusedCapture.pm
# once (20µs+12µs) by Module::Pluggable::Object::_require at line 33 of Perl/Critic/Policy/Variables/ProhibitEvilVariables.pm
# once (16µs+16µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/ErrorHandling/RequireCheckingReturnValueOfEval.pm
# once (15µs+17µs) by Module::Pluggable::Object::_require at line 27 of Perl/Critic/Policy/InputOutput/ProhibitBacktickOperators.pm
# once (15µs+17µs) by main::BEGIN@19 at line 45 of Perl/Critic/Command.pm
# once (16µs+16µs) by Module::Pluggable::Object::_require at line 29 of Perl/Critic/Policy/Variables/ProhibitEvilVariables.pm
# once (16µs+16µs) by Module::Pluggable::Object::_require at line 25 of Perl/Critic/Policy/InputOutput/ProhibitTwoArgOpen.pm
# once (17µs+15µs) by Perl::Critic::Policy::BEGIN@45 at line 35 of Perl/Critic/PolicyParameter.pm
# once (15µs+16µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitInterpolationOfLiterals.pm
# once (15µs+16µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/BuiltinFunctions/ProhibitStringySplit.pm
# once (15µs+16µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitMagicNumbers.pm
# once (16µs+15µs) by Perl::Critic::Document::BEGIN@24 at line 25 of Perl/Critic/Annotation.pm
# once (15µs+16µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/ControlStructures/ProhibitUnlessBlocks.pm
# once (20µs+11µs) by Module::Pluggable::Object::_require at line 38 of Perl/Critic/Policy/TestingAndDebugging/RequireTestLabels.pm
# once (15µs+15µs) by Module::Pluggable::Object::_require at line 27 of Perl/Critic/Policy/InputOutput/RequireBriefOpen.pm
# once (15µs+15µs) by Module::Pluggable::Object::_require at line 28 of Perl/Critic/Policy/Subroutines/ProhibitUnusedPrivateSubroutines.pm
# once (15µs+15µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/Modules/ProhibitMultiplePackages.pm
# once (15µs+15µs) by Module::Pluggable::Object::_require at line 33 of Perl/Critic/Policy/ValuesAndExpressions/RequireConstantVersion.pm
# once (15µs+15µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitImplicitNewlines.pm
# once (15µs+15µs) by Module::Pluggable::Object::_require at line 28 of Perl/Critic/Policy/Variables/ProhibitPunctuationVars.pm
# once (15µs+15µs) by Module::Pluggable::Object::_require at line 27 of Perl/Critic/Policy/RegularExpressions/ProhibitEnumeratedClasses.pm
# once (15µs+16µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/Variables/ProhibitConditionalDeclarations.pm
# once (15µs+15µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/ControlStructures/ProhibitLabelsWithSpecialBlockNames.pm
# once (14µs+16µs) by Module::Pluggable::Object::_require at line 25 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitCommaSeparatedStatements.pm
# once (15µs+15µs) by Module::Pluggable::Object::_require at line 31 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitComplexVersion.pm
# once (14µs+15µs) by Perl::Critic::Command::BEGIN@26 at line 61 of Perl/Critic/Utils/Constants.pm
# once (15µs+15µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/Modules/ProhibitExcessMainComplexity.pm
# once (15µs+15µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/CodeLayout/RequireTrailingCommas.pm
# once (19µs+11µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 202 of Perl/Critic/Utils.pm
# once (14µs+16µs) by Perl::Critic::Command::BEGIN@27 at line 36 of Perl/Critic/Violation.pm
# once (14µs+16µs) by Perl::Critic::PolicyFactory::BEGIN@27 at line 27 of Perl/Critic/PolicyConfig.pm
# once (15µs+15µs) by Module::Pluggable::Object::_require at line 25 of Perl/Critic/Policy/TestingAndDebugging/RequireUseWarnings.pm
# once (15µs+15µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/Variables/ProhibitAugmentedAssignmentInDeclaration.pm
# once (15µs+15µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitEscapedCharacters.pm
# once (15µs+15µs) by Module::Pluggable::Object::_require at line 25 of Perl/Critic/Policy/TestingAndDebugging/ProhibitNoWarnings.pm
# once (15µs+15µs) by Module::Pluggable::Object::_require at line 28 of Perl/Critic/Policy/Variables/ProhibitPackageVars.pm
# once (15µs+15µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/TestingAndDebugging/ProhibitNoStrict.pm
# once (15µs+15µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/ClassHierarchies/ProhibitAutoloading.pm
# once (15µs+15µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/Variables/ProhibitUnusedVariables.pm
# once (15µs+15µs) by Module::Pluggable::Object::_require at line 27 of Perl/Critic/Policy/RegularExpressions/ProhibitComplexRegexes.pm
# once (14µs+15µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitConstantPragma.pm
# once (15µs+15µs) by Module::Pluggable::Object::_require at line 31 of Perl/Critic/Policy/Subroutines/RequireArgUnpacking.pm
# once (14µs+15µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/Subroutines/ProhibitAmpersandSigils.pm
# once (15µs+15µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/Variables/RequireLexicalLoopIterators.pm
# once (15µs+15µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/InputOutput/RequireCheckedSyscalls.pm
# once (15µs+15µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/CodeLayout/RequireConsistentNewlines.pm
# once (14µs+15µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/Variables/ProhibitReusedNames.pm
# once (14µs+15µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/Variables/RequireNegativeIndices.pm
# once (14µs+15µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/Modules/ProhibitAutomaticExportation.pm
# once (9µs+20µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 207 of Perl/Critic/Utils.pm
# once (14µs+15µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/BuiltinFunctions/ProhibitReverseSortBlock.pm
# once (14µs+15µs) by Module::Pluggable::Object::_require at line 28 of Perl/Critic/Policy/Subroutines/ProhibitManyArgs.pm
# once (14µs+15µs) by Module::Pluggable::Object::_require at line 21 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitMismatchedOperators.pm
# once (14µs+15µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/BuiltinFunctions/ProhibitBooleanGrep.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/CodeLayout/ProhibitQuotedWordLists.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/Modules/RequireVersionVar.pm
# once (15µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/Variables/ProhibitMatchVars.pm
# once (14µs+15µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/Modules/RequireNoMatchVarsWithUseEnglish.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 25 of Perl/Critic/Policy/Modules/RequireFilenameMatchesPackage.pm
# once (14µs+15µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/RegularExpressions/ProhibitFixedStringMatches.pm
# once (14µs+15µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitLongChainsOfMethodCalls.pm
# once (14µs+15µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/BuiltinFunctions/ProhibitLvalueSubstr.pm
# once (14µs+15µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/BuiltinFunctions/ProhibitSleepViaSelect.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/RegularExpressions/RequireBracesForMultiline.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 25 of Perl/Critic/Policy/InputOutput/RequireEncodingWithUTF8Layer.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/BuiltinFunctions/ProhibitUniversalCan.pm
# once (14µs+15µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/Modules/RequireEndWithOne.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/ClassHierarchies/ProhibitOneArgBless.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/Variables/ProtectPrivateVars.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/ValuesAndExpressions/RequireQuotedHeredocTerminator.pm
# once (14µs+15µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/BuiltinFunctions/ProhibitVoidGrep.pm
# once (14µs+15µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/RegularExpressions/ProhibitUnusualDelimiters.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 27 of Perl/Critic/Policy/Subroutines/ProtectPrivateSubs.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/BuiltinFunctions/RequireBlockMap.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/BuiltinFunctions/RequireSimpleSortBlock.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 25 of Perl/Critic/Policy/TestingAndDebugging/RequireUseStrict.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/Modules/RequireExplicitPackage.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/Variables/ProhibitPerl4PackageNames.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/Modules/ProhibitConditionalUseStatements.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/Documentation/RequirePackageMatchesPodName.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/BuiltinFunctions/ProhibitComplexMappings.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/ClassHierarchies/ProhibitExplicitISA.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/Subroutines/ProhibitNestedSubs.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/BuiltinFunctions/ProhibitUniversalIsa.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/CodeLayout/ProhibitHardTabs.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/RegularExpressions/RequireExtendedFormatting.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/BuiltinFunctions/RequireBlockGrep.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/ControlStructures/ProhibitCStyleForLoops.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/TestingAndDebugging/ProhibitProlongedStrictureOverride.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/Subroutines/ProhibitExplicitReturnUndef.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitEmptyQuotes.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitLeadingZeros.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/Subroutines/ProhibitExcessComplexity.pm
# once (13µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/Modules/RequireBarewordIncludes.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/BuiltinFunctions/ProhibitVoidMap.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/InputOutput/RequireCheckedClose.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/ControlStructures/ProhibitCascadingIfElse.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/RegularExpressions/RequireLineBoundaryMatching.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/Miscellanea/ProhibitFormats.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/Subroutines/ProhibitReturnSort.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/Miscellanea/ProhibitUnrestrictedNoCritic.pm
# once (18µs+10µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 197 of Perl/Critic/Utils.pm
# once (13µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitVersionStrings.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/Miscellanea/ProhibitTies.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/RegularExpressions/RequireDotMatchAnything.pm
# once (13µs+14µs) by main::BEGIN@19 at line 47 of Perl/Critic/Command.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/ValuesAndExpressions/RequireUpperCaseHeredocTerminator.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/InputOutput/RequireCheckedOpen.pm
# once (13µs+14µs) by Perl::Critic::Command::BEGIN@27 at line 37 of Perl/Critic/Violation.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/ControlStructures/ProhibitUntilBlocks.pm
# once (13µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/Variables/ProhibitLocalVars.pm
# once (13µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/Subroutines/ProhibitSubroutinePrototypes.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/References/ProhibitDoubleSigils.pm
# once (13µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/Variables/RequireLocalizedPunctuationVars.pm
# once (13µs+14µs) by Perl::Critic::Command::BEGIN@27 at line 38 of Perl/Critic/Violation.pm
# once (14µs+13µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/BuiltinFunctions/RequireGlobFunction.pm
# once (13µs+14µs) by Perl::Critic::Command::BEGIN@27 at line 48 of Perl/Critic/Violation.pm
# once (13µs+14µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitNoisyQuotes.pm
# once (14µs+13µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 1033 of Perl/Critic/Utils.pm
# once (13µs+14µs) by main::BEGIN@19 at line 48 of Perl/Critic/Command.pm
# once (13µs+14µs) by Perl::Critic::Command::BEGIN@27 at line 39 of Perl/Critic/Violation.pm
# once (14µs+12µs) by Perl::Critic::Command::BEGIN@26 at line 64 of Perl/Critic/Utils/Constants.pm
# once (13µs+14µs) by main::BEGIN@19 at line 49 of Perl/Critic/Command.pm
# once (13µs+14µs) by Module::Pluggable::Object::_require at line 27 of Perl/Critic/Policy/ControlStructures/ProhibitLabelsWithSpecialBlockNames.pm
# once (13µs+13µs) by Module::Pluggable::Object::_require at line 99 of Perl/Critic/Policy/Variables/ProhibitPunctuationVars.pm
# once (13µs+13µs) by main::BEGIN@19 at line 50 of Perl/Critic/Command.pm
# once (12µs+13µs) by Module::Pluggable::Object::_require at line 56 of Perl/Critic/Policy/ControlStructures/ProhibitMutatingListFunctions.pm
# once (13µs+11µs) by Module::Pluggable::Object::_require at line 29 of Perl/Critic/Policy/Documentation/RequirePodSections.pm
# once (12µs+12µs) by Module::Pluggable::Object::_require at line 29 of Perl/Critic/Policy/CodeLayout/ProhibitParensWithBuiltins.pm
# once (12µs+13µs) by Module::Pluggable::Object::_require at line 37 of Perl/Critic/Policy/TestingAndDebugging/RequireTestLabels.pm
# once (12µs+12µs) by Perl::Critic::Config::BEGIN@25 at line 38 of Perl/Critic/Theme.pm
# once (12µs+12µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/InputOutput/ProhibitTwoArgOpen.pm
# once (12µs+12µs) by Module::Pluggable::Object::_require at line 30 of Perl/Critic/Policy/InputOutput/ProhibitTwoArgOpen.pm
# once (12µs+12µs) by Perl::Critic::Command::BEGIN@26 at line 75 of Perl/Critic/Utils/Constants.pm
# once (10µs+14µs) by Module::Pluggable::Object::_require at line 30 of Perl/Critic/Policy/RegularExpressions/ProhibitComplexRegexes.pm
# once (12µs+11µs) by Perl::Critic::Command::BEGIN@26 at line 76 of Perl/Critic/Utils/Constants.pm
# once (12µs+12µs) by Perl::Critic::Command::BEGIN@26 at line 77 of Perl/Critic/Utils/Constants.pm
# once (12µs+12µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/InputOutput/RequireBracedFileHandleWithPrint.pm
# once (11µs+12µs) by Module::Pluggable::Object::_require at line 27 of Perl/Critic/Policy/InputOutput/ProhibitTwoArgOpen.pm
# once (11µs+12µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/Modules/ProhibitMultiplePackages.pm
# once (11µs+12µs) by Module::Pluggable::Object::_require at line 59 of Perl/Critic/Policy/Modules/ProhibitEvilModules.pm
# once (12µs+11µs) by Module::Pluggable::Object::_require at line 30 of Perl/Critic/Policy/Modules/ProhibitEvilModules.pm
# once (11µs+12µs) by Module::Pluggable::Object::_require at line 28 of Perl/Critic/Policy/ErrorHandling/RequireCheckingReturnValueOfEval.pm
# once (11µs+12µs) by Module::Pluggable::Object::_require at line 47 of Perl/Critic/Policy/Modules/ProhibitEvilModules.pm
# once (12µs+12µs) by Module::Pluggable::Object::_require at line 49 of Perl/Critic/Policy/Variables/ProhibitEvilVariables.pm
# once (11µs+12µs) by Module::Pluggable::Object::_require at line 25 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitSpecialLiteralHeredocTerminator.pm
# once (11µs+12µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 1031 of Perl/Critic/Utils.pm
# once (11µs+12µs) by Module::Pluggable::Object::_require at line 38 of Perl/Critic/Policy/RegularExpressions/ProhibitUnusedCapture.pm
# once (11µs+12µs) by Module::Pluggable::Object::_require at line 38 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitMagicNumbers.pm
# once (12µs+11µs) by Module::Pluggable::Object::_require at line 31 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitMagicNumbers.pm
# once (11µs+12µs) by Module::Pluggable::Object::_require at line 30 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitQuotesAsQuotelikeOperatorDelimiters.pm
# once (11µs+12µs) by Module::Pluggable::Object::_require at line 31 of Perl/Critic/Policy/ControlStructures/ProhibitUnreachableCode.pm
# once (11µs+11µs) by Module::Pluggable::Object::_require at line 61 of Perl/Critic/Policy/Variables/ProhibitEvilVariables.pm
# once (11µs+12µs) by Module::Pluggable::Object::_require at line 124 of Perl/Critic/Policy/ErrorHandling/RequireCheckingReturnValueOfEval.pm
# once (11µs+12µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/RegularExpressions/ProhibitCaptureWithoutTest.pm
# once (11µs+12µs) by Module::Pluggable::Object::_require at line 43 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitMixedBooleanOperators.pm
# once (11µs+12µs) by Module::Pluggable::Object::_require at line 29 of Perl/Critic/Policy/Objects/ProhibitIndirectSyntax.pm
# once (11µs+12µs) by Module::Pluggable::Object::_require at line 54 of Perl/Critic/Policy/Documentation/RequirePodLinksIncludeText.pm
# once (11µs+12µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/ValuesAndExpressions/RequireQuotedHeredocTerminator.pm
# once (11µs+11µs) by Module::Pluggable::Object::_require at line 43 of Perl/Critic/Policy/Variables/ProhibitEvilVariables.pm
# once (10µs+12µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/ControlStructures/ProhibitDeepNests.pm
# once (12µs+10µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 205 of Perl/Critic/Utils.pm
# once (11µs+11µs) by Module::Pluggable::Object::_require at line 35 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitMismatchedOperators.pm
# once (11µs+11µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/Subroutines/ProhibitBuiltinHomonyms.pm
# once (11µs+11µs) by Module::Pluggable::Object::_require at line 25 of Perl/Critic/Policy/Documentation/RequirePodAtEnd.pm
# once (11µs+11µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/ValuesAndExpressions/RequireUpperCaseHeredocTerminator.pm
# once (11µs+11µs) by Module::Pluggable::Object::_require at line 39 of Perl/Critic/Policy/Documentation/PodSpelling.pm
# once (10µs+12µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/BuiltinFunctions/ProhibitStringySplit.pm
# once (11µs+11µs) by Module::Pluggable::Object::_require at line 42 of Perl/Critic/Policy/NamingConventions/Capitalization.pm
# once (11µs+11µs) by Module::Pluggable::Object::_require at line 36 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitMagicNumbers.pm
# once (11µs+11µs) by Module::Pluggable::Object::_require at line 28 of Perl/Critic/Policy/TestingAndDebugging/RequireUseWarnings.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 55 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitInterpolationOfLiterals.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 28 of Perl/Critic/Policy/Variables/RequireLocalizedPunctuationVars.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitEmptyQuotes.pm
# once (11µs+11µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/CodeLayout/RequireConsistentNewlines.pm
# once (10µs+11µs) by Perl::Critic::Command::BEGIN@26 at line 62 of Perl/Critic/Utils/Constants.pm
# once (11µs+11µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/Variables/RequireLexicalLoopIterators.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 25 of Perl/Critic/Policy/Documentation/RequirePackageMatchesPodName.pm
# once (10µs+12µs) by Module::Pluggable::Object::_require at line 34 of Perl/Critic/Policy/ValuesAndExpressions/RequireConstantVersion.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 75 of Perl/Critic/Policy/NamingConventions/Capitalization.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/Variables/ProhibitConditionalDeclarations.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 30 of Perl/Critic/Policy/Subroutines/ProhibitUnusedPrivateSubroutines.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 27 of Perl/Critic/Policy/ValuesAndExpressions/RequireNumberSeparators.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 33 of Perl/Critic/Policy/CodeLayout/ProhibitParensWithBuiltins.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 28 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitMagicNumbers.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitMagicNumbers.pm
# once (11µs+10µs) by Module::Pluggable::Object::_require at line 31 of Perl/Critic/Policy/CodeLayout/ProhibitHardTabs.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitMismatchedOperators.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 55 of Perl/Critic/Policy/Documentation/RequirePodLinksIncludeText.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 225 of Perl/Critic/Policy/ControlStructures/ProhibitMutatingListFunctions.pm
# once (11µs+11µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/InputOutput/RequireEncodingWithUTF8Layer.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 27 of Perl/Critic/Policy/BuiltinFunctions/ProhibitLvalueSubstr.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/Modules/ProhibitConditionalUseStatements.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 34 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitComplexVersion.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 32 of Perl/Critic/Policy/Subroutines/RequireArgUnpacking.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/Miscellanea/ProhibitUnrestrictedNoCritic.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 36 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitMismatchedOperators.pm
# once (10µs+11µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 321 of Perl/Critic/Utils.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 76 of Perl/Critic/Policy/Modules/ProhibitEvilModules.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 40 of Perl/Critic/Policy/Modules/ProhibitEvilModules.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 28 of Perl/Critic/Policy/TestingAndDebugging/RequireUseStrict.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/NamingConventions/ProhibitAmbiguousNames.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/Documentation/RequirePodSections.pm
# once (10µs+11µs) by Perl::Critic::Command::BEGIN@26 at line 73 of Perl/Critic/Utils/Constants.pm
# once (10µs+11µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 201 of Perl/Critic/Utils.pm
# once (11µs+10µs) by Module::Pluggable::Object::_require at line 29 of Perl/Critic/Policy/RegularExpressions/ProhibitFixedStringMatches.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 48 of Perl/Critic/Policy/ValuesAndExpressions/RequireConstantVersion.pm
# once (10µs+11µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 187 of Perl/Critic/Utils.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/InputOutput/RequireCheckedOpen.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 28 of Perl/Critic/Policy/Subroutines/ProtectPrivateSubs.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/CodeLayout/ProhibitQuotedWordLists.pm
# once (10µs+11µs) by Perl::Critic::Command::BEGIN@26 at line 63 of Perl/Critic/Utils/Constants.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/Modules/ProhibitAutomaticExportation.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/Variables/ProhibitReusedNames.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitNoisyQuotes.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/Modules/RequireExplicitPackage.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/Variables/ProhibitAugmentedAssignmentInDeclaration.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/Variables/ProtectPrivateVars.pm
# once (10µs+11µs) by Perl::Critic::Config::BEGIN@20 at line 105 of Perl/Critic/Exception/AggregateConfiguration.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/BuiltinFunctions/ProhibitLvalueSubstr.pm
# once (10µs+11µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 1032 of Perl/Critic/Utils.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/Modules/RequireEndWithOne.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitVersionStrings.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 25 of Perl/Critic/Policy/Modules/RequireNoMatchVarsWithUseEnglish.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 29 of Perl/Critic/Policy/Subroutines/ProhibitManyArgs.pm
# once (10µs+10µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/InputOutput/RequireCheckedClose.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/Variables/ProhibitLocalVars.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 37 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitComplexVersion.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/Subroutines/ProhibitNestedSubs.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 25 of Perl/Critic/Policy/Documentation/RequirePodSections.pm
# once (10µs+11µs) by Perl::Critic::Config::BEGIN@20 at line 104 of Perl/Critic/Exception/AggregateConfiguration.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/BuiltinFunctions/ProhibitUniversalCan.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 41 of Perl/Critic/Policy/Modules/ProhibitEvilModules.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 35 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitComplexVersion.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 38 of Perl/Critic/Policy/Documentation/RequirePodSections.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/BuiltinFunctions/ProhibitVoidMap.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/BuiltinFunctions/ProhibitUniversalIsa.pm
# once (10µs+10µs) by Perl::Critic::Command::BEGIN@26 at line 81 of Perl/Critic/Utils/Constants.pm
# once (10µs+10µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/BuiltinFunctions/RequireGlobFunction.pm
# once (10µs+11µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 204 of Perl/Critic/Utils.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 80 of Perl/Critic/Policy/Modules/ProhibitEvilModules.pm
# once (10µs+10µs) by Module::Pluggable::Object::_require at line 43 of Perl/Critic/Policy/NamingConventions/Capitalization.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/Modules/RequireFilenameMatchesPackage.pm
# once (10µs+10µs) by Module::Pluggable::Object::_require at line 31 of Perl/Critic/Policy/Objects/ProhibitIndirectSyntax.pm
# once (10µs+10µs) by Module::Pluggable::Object::_require at line 31 of Perl/Critic/Policy/RegularExpressions/ProhibitComplexRegexes.pm
# once (10µs+10µs) by Perl::Critic::Config::BEGIN@25 at line 43 of Perl/Critic/Theme.pm
# once (10µs+10µs) by Module::Pluggable::Object::_require at line 46 of Perl/Critic/Policy/NamingConventions/Capitalization.pm
# once (10µs+10µs) by Perl::Critic::Command::BEGIN@26 at line 74 of Perl/Critic/Utils/Constants.pm
# once (9µs+11µs) by Module::Pluggable::Object::_require at line 37 of Perl/Critic/Policy/ValuesAndExpressions/RequireConstantVersion.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 39 of Perl/Critic/Policy/ValuesAndExpressions/RequireConstantVersion.pm
# once (10µs+10µs) by Module::Pluggable::Object::_require at line 49 of Perl/Critic/Policy/ValuesAndExpressions/RequireConstantVersion.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 30 of Perl/Critic/Policy/InputOutput/RequireBriefOpen.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/BuiltinFunctions/ProhibitVoidGrep.pm
# once (10µs+10µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 198 of Perl/Critic/Utils.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 81 of Perl/Critic/Policy/Modules/ProhibitEvilModules.pm
# once (10µs+10µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/InputOutput/RequireBracedFileHandleWithPrint.pm
# once (10µs+10µs) by Module::Pluggable::Object::_require at line 31 of Perl/Critic/Policy/Subroutines/ProhibitManyArgs.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/Subroutines/ProhibitReturnSort.pm
# once (10µs+10µs) by Module::Pluggable::Object::_require at line 32 of Perl/Critic/Policy/ControlStructures/ProhibitUnreachableCode.pm
# once (10µs+10µs) by Module::Pluggable::Object::_require at line 27 of Perl/Critic/Policy/CodeLayout/RequireConsistentNewlines.pm
# once (10µs+10µs) by Module::Pluggable::Object::_require at line 27 of Perl/Critic/Policy/Documentation/RequirePackageMatchesPodName.pm
# once (10µs+10µs) by Module::Pluggable::Object::_require at line 44 of Perl/Critic/Policy/NamingConventions/Capitalization.pm
# once (10µs+10µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/BuiltinFunctions/ProhibitSleepViaSelect.pm
# once (9µs+10µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 206 of Perl/Critic/Utils.pm
# once (10µs+10µs) by Module::Pluggable::Object::_require at line 39 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitComplexVersion.pm
# once (10µs+10µs) by Module::Pluggable::Object::_require at line 52 of Perl/Critic/Policy/RegularExpressions/ProhibitUnusedCapture.pm
# once (10µs+10µs) by Module::Pluggable::Object::_require at line 52 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitMagicNumbers.pm
# once (10µs+10µs) by Module::Pluggable::Object::_require at line 44 of Perl/Critic/Policy/Variables/RequireNegativeIndices.pm
# once (10µs+10µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 200 of Perl/Critic/Utils.pm
# once (10µs+10µs) by Module::Pluggable::Object::_require at line 34 of Perl/Critic/Policy/Variables/ProhibitEvilVariables.pm
# once (9µs+10µs) by Module::Pluggable::Object::_require at line 38 of Perl/Critic/Policy/ValuesAndExpressions/RequireConstantVersion.pm
# once (10µs+10µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 199 of Perl/Critic/Utils.pm
# once (10µs+10µs) by Module::Pluggable::Object::_require at line 33 of Perl/Critic/Policy/Subroutines/RequireArgUnpacking.pm
# once (9µs+10µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/Documentation/RequirePodSections.pm
# once (9µs+10µs) by Module::Pluggable::Object::_require at line 45 of Perl/Critic/Policy/NamingConventions/Capitalization.pm
# once (9µs+10µs) by Module::Pluggable::Object::_require at line 48 of Perl/Critic/Policy/InputOutput/RequireBriefOpen.pm
# once (10µs+10µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 203 of Perl/Critic/Utils.pm
# once (9µs+10µs) by Module::Pluggable::Object::_require at line 36 of Perl/Critic/Policy/Subroutines/RequireArgUnpacking.pm
# once (9µs+10µs) by Module::Pluggable::Object::_require at line 28 of Perl/Critic/Policy/InputOutput/RequireEncodingWithUTF8Layer.pm
# once (10µs+10µs) by Module::Pluggable::Object::_require at line 31 of Perl/Critic/Policy/InputOutput/RequireBriefOpen.pm
# once (10µs+10µs) by Module::Pluggable::Object::_require at line 76 of Perl/Critic/Policy/Variables/ProhibitEvilVariables.pm
# once (10µs+10µs) by Module::Pluggable::Object::_require at line 39 of Perl/Critic/Policy/Documentation/RequirePodSections.pm
# once (10µs+10µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 188 of Perl/Critic/Utils.pm
# once (9µs+10µs) by Module::Pluggable::Object::_require at line 27 of Perl/Critic/Policy/Documentation/RequirePodSections.pm
# once (9µs+10µs) by Module::Pluggable::Object::_require at line 40 of Perl/Critic/Policy/Documentation/RequirePodSections.pm
# once (10µs+10µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 189 of Perl/Critic/Utils.pm
# once (9µs+10µs) by Module::Pluggable::Object::_require at line 347 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitMagicNumbers.pm
# once (9µs+10µs) by Module::Pluggable::Object::_require at line 34 of Perl/Critic/Policy/Subroutines/RequireArgUnpacking.pm
# once (9µs+10µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 191 of Perl/Critic/Utils.pm
# once (9µs+10µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 209 of Perl/Critic/Utils.pm
# once (9µs+10µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 190 of Perl/Critic/Utils.pm
# once (9µs+10µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 196 of Perl/Critic/Utils.pm
# once (9µs+10µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 210 of Perl/Critic/Utils.pm
# once (9µs+10µs) by Module::Pluggable::Object::_require at line 77 of Perl/Critic/Policy/Variables/ProhibitEvilVariables.pm
# once (9µs+10µs) by Module::Pluggable::Object::_require at line 50 of Perl/Critic/Policy/InputOutput/RequireBriefOpen.pm
# once (9µs+10µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 195 of Perl/Critic/Utils.pm
# once (9µs+10µs) by Module::Pluggable::Object::_require at line 52 of Perl/Critic/Policy/InputOutput/RequireBriefOpen.pm
# once (9µs+10µs) by Module::Pluggable::Object::_require at line 49 of Perl/Critic/Policy/InputOutput/RequireBriefOpen.pm
# once (9µs+10µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 212 of Perl/Critic/Utils.pm
# once (9µs+10µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 211 of Perl/Critic/Utils.pm
# once (8µs+10µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 208 of Perl/Critic/Utils.pm | ||||
101 | 423 | 419µs | 423 | 346µs | croak "$REASSIGN scalar" if is_sv_readonly $_[0]; # spent 346µs making 423 calls to Readonly::is_sv_readonly, avg 817ns/call |
102 | 423 | 434µs | 423 | 1.31ms | my $badtype = _is_badtype(ref tied $_[0]); # spent 1.31ms making 423 calls to Readonly::_is_badtype, avg 3µs/call |
103 | 423 | 26µs | croak "$REASSIGN $badtype" if $badtype; | ||
104 | 423 | 116µs | 7 | 10µs | my $value = $_[1]; # spent 8µs making 6 calls to Readonly::Scalar::FETCH, avg 1µs/call
# spent 2µs making 1 call to Readonly::Hash::FETCH |
105 | |||||
106 | # Recursively check passed element for references; if any, make them Readonly | ||||
107 | 423 | 222µs | foreach ($value) { | ||
108 | 423 | 422µs | if (ref eq 'SCALAR') { Scalar my $v => $$_; $_ = \$v } | ||
109 | 180 | 188µs | 90 | 1.77ms | elsif (ref eq 'ARRAY') { Array my @v => @$_; $_ = \@v } # spent 1.77ms making 90 calls to Readonly::Array, avg 20µs/call |
110 | elsif (ref eq 'HASH') { Hash my %v => $_; $_ = \%v } | ||||
111 | } | ||||
112 | |||||
113 | # xs method: flag scalar as readonly | ||||
114 | 423 | 14µs | if ($XSokay) { | ||
115 | $_[0] = $value; | ||||
116 | make_sv_readonly $_[0]; | ||||
117 | return; | ||||
118 | } | ||||
119 | |||||
120 | # pure-perl method: tied scalar | ||||
121 | 846 | 1.21ms | 423 | 6.53ms | my $tieobj = eval { tie $_[0], 'Readonly::Scalar', $value }; # spent 6.53ms making 423 calls to Readonly::Scalar::TIESCALAR, avg 15µs/call |
122 | 423 | 19µs | if ($@) { | ||
123 | croak "$REASSIGN scalar" if substr($@, 0, 43) eq $MODIFY; | ||||
124 | die $@; # some other error? | ||||
125 | } | ||||
126 | 423 | 1.41ms | return $tieobj; | ||
127 | } | ||||
128 | |||||
129 | # Deep Readonly array | ||||
130 | # spent 4.79ms (2.41+2.38) within Readonly::Array which was called 212 times, avg 23µs/call:
# 90 times (828µs+941µs) by Readonly::Scalar at line 109, avg 20µs/call
# 56 times (538µs+531µs) by Readonly::Hash at line 165, avg 19µs/call
# 20 times (164µs+-164µs) by Readonly::Array at line 139, avg 0s/call
# once (59µs+279µs) by Module::Pluggable::Object::_require at line 30 of Perl/Critic/Policy/RegularExpressions/ProhibitEnumeratedClasses.pm
# once (85µs+30µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 402 of Perl/Critic/Utils.pm
# once (24µs+83µs) by Module::Pluggable::Object::_require at line 111 of Perl/Critic/Policy/TestingAndDebugging/ProhibitNoWarnings.pm
# once (46µs+30µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 35 of Perl/Critic/Utils.pm
# once (44µs+24µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 111 of Perl/Critic/Utils.pm
# once (40µs+21µs) by Module::Pluggable::Object::_require at line 31 of Perl/Critic/Policy/InputOutput/RequireCheckedSyscalls.pm
# once (40µs+19µs) by Module::Pluggable::Object::_require at line 77 of Perl/Critic/Policy/Variables/ProhibitPunctuationVars.pm
# once (32µs+16µs) by Module::Pluggable::Object::_require at line 40 of Perl/Critic/Policy/CodeLayout/ProhibitParensWithBuiltins.pm
# once (19µs+25µs) by Perl::Critic::Utils::BEGIN@25 at line 30 of Perl/Critic/Exception/Fatal/Generic.pm
# once (19µs+23µs) by Perl::Critic::PolicyConfig::BEGIN@19 at line 32 of Perl/Critic/Exception/Configuration/Option/Policy/ParameterValue.pm
# once (18µs+23µs) by Perl::Critic::PolicyConfig::BEGIN@20 at line 30 of Perl/Critic/Exception/Configuration/Option/Policy/ExtraParameter.pm
# once (18µs+23µs) by Perl::Critic::Violation::BEGIN@30 at line 30 of Perl/Critic/Exception/Fatal/Internal.pm
# once (17µs+21µs) by main::BEGIN@19 at line 37 of Perl/Critic/Command.pm
# once (17µs+20µs) by Perl::Critic::Utils::POD::BEGIN@22 at line 35 of Perl/Critic/Exception/IO.pm
# once (17µs+20µs) by Perl::Critic::Command::_critique at line 34 of Perl/Critic.pm
# once (16µs+19µs) by Perl::Critic::PolicyFactory::BEGIN@34 at line 30 of Perl/Critic/Exception/Configuration/NonExistentPolicy.pm
# once (15µs+19µs) by Perl::Critic::PolicyFactory::BEGIN@33 at line 30 of Perl/Critic/Exception/Fatal/PolicyDefinition.pm
# once (15µs+17µs) by Perl::Critic::Policy::BEGIN@33 at line 23 of Perl/Critic/Utils/DataConversion.pm
# once (17µs+13µs) by Module::Pluggable::Object::_require at line 342 of Perl/Critic/Policy/ErrorHandling/RequireCarping.pm
# once (14µs+16µs) by Perl::Critic::BEGIN@23 at line 31 of Perl/Critic/Exception/Configuration/Generic.pm
# once (13µs+16µs) by Module::Pluggable::Object::_require at line 27 of Perl/Critic/Policy/ControlStructures/ProhibitMutatingListFunctions.pm
# once (16µs+13µs) by Module::Pluggable::Object::_require at line 28 of Perl/Critic/Policy/ControlStructures/ProhibitMutatingListFunctions.pm
# once (13µs+16µs) by Perl::Critic::Policy::BEGIN@45 at line 17 of Perl/Critic/PolicyParameter.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 315 of Perl/Critic/Policy/ErrorHandling/RequireCarping.pm
# once (12µs+15µs) by Perl::Critic::Document::BEGIN@22 at line 21 of PPIx/Utilities/Node.pm
# once (13µs+15µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/CodeLayout/ProhibitParensWithBuiltins.pm
# once (13µs+14µs) by Module::Pluggable::Object::_require at line 20 of Perl/Critic/Policy/ControlStructures/ProhibitUnreachableCode.pm
# once (12µs+15µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/InputOutput/RequireBracedFileHandleWithPrint.pm
# once (12µs+14µs) by Perl::Critic::Command::BEGIN@21 at line 35 of Perl/Critic/Exception/Parse.pm
# once (12µs+14µs) by Perl::Critic::OptionsProcessor::BEGIN@17 at line 30 of Perl/Critic/Exception/Configuration/Option/Global/ExtraParameter.pm
# once (12µs+14µs) by Perl::Critic::Config::BEGIN@20 at line 35 of Perl/Critic/Exception/AggregateConfiguration.pm
# once (12µs+14µs) by Perl::Critic::Config::BEGIN@25 at line 31 of Perl/Critic/Theme.pm
# once (12µs+14µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/Subroutines/ProhibitBuiltinHomonyms.pm
# once (11µs+14µs) by Perl::Critic::Policy::Subroutines::ProhibitExcessComplexity::BEGIN@16 at line 26 of Perl/Critic/Utils/McCabe.pm
# once (11µs+14µs) by Perl::Critic::Config::BEGIN@22 at line 32 of Perl/Critic/Exception/Configuration/Option/Global/ParameterValue.pm
# once (14µs+11µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 1084 of Perl/Critic/Utils.pm
# once (12µs+11µs) by Module::Pluggable::Object::_require at line 33 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitQuotesAsQuotelikeOperatorDelimiters.pm
# once (11µs+11µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 1060 of Perl/Critic/Utils.pm
# once (11µs+11µs) by Module::Pluggable::Object::_require at line 25 of Perl/Critic/Policy/Variables/ProhibitMatchVars.pm
# once (11µs+10µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/ControlStructures/ProhibitUnreachableCode.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 103 of Perl/Critic/Policy/Variables/ProhibitPunctuationVars.pm
# once (10µs+10µs) by Module::Pluggable::Object::_require at line 36 of Perl/Critic/Policy/Variables/ProhibitEvilVariables.pm
# once (10µs+10µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/ControlStructures/ProhibitUnreachableCode.pm
# once (10µs+10µs) by Module::Pluggable::Object::_require at line 27 of Perl/Critic/Policy/InputOutput/RequireCheckedSyscalls.pm
# once (9µs+10µs) by Module::Pluggable::Object::_require at line 29 of Perl/Critic/Policy/RegularExpressions/ProhibitUnusualDelimiters.pm
# once (9µs+10µs) by Module::Pluggable::Object::_require at line 29 of Perl/Critic/Policy/RegularExpressions/RequireBracesForMultiline.pm | ||||
131 | 212 | 213µs | 212 | 632µs | my $badtype = _is_badtype(ref tied @{$_[0]}); # spent 632µs making 212 calls to Readonly::_is_badtype, avg 3µs/call |
132 | 212 | 10µs | croak "$REASSIGN $badtype" if $badtype; | ||
133 | 212 | 30µs | my $aref = shift; | ||
134 | 212 | 238µs | my @values = @_; | ||
135 | |||||
136 | # Recursively check passed elements for references; if any, make them Readonly | ||||
137 | 212 | 94µs | foreach (@values) { | ||
138 | 1100 | 287µs | if (ref eq 'SCALAR') { Scalar my $v => $$_; $_ = \$v } | ||
139 | 40 | 34µs | 20 | 0s | elsif (ref eq 'ARRAY') { Array my @v => @$_; $_ = \@v } # spent 343µs making 20 calls to Readonly::Array, avg 17µs/call, recursion: max depth 1, sum of overlapping time 343µs |
140 | elsif (ref eq 'HASH') { Hash my %v => $_; $_ = \%v } | ||||
141 | } | ||||
142 | |||||
143 | # Lastly, tie the passed reference | ||||
144 | 212 | 3.93ms | 212 | 1.75ms | return tie @$aref, 'Readonly::Array', @values; # spent 1.75ms making 212 calls to Readonly::Array::TIEARRAY, avg 8µs/call |
145 | } | ||||
146 | |||||
147 | # Deep Readonly hash | ||||
148 | # spent 9.33ms (6.13+3.20) within Readonly::Hash which was called 157 times, avg 59µs/call:
# 75 times (3.73ms+-3.73ms) by Readonly::Hash at line 166, avg 0s/call
# once (22µs+2.99ms) by Module::Pluggable::Object::_require at line 63 of Perl/Critic/Policy/Documentation/RequirePodSections.pm
# once (257µs+1.49ms) by Perl::Critic::Exception::Parse::BEGIN@18 at line 1233 of Perl/Critic/Utils.pm
# once (100µs+424µs) by Module::Pluggable::Object::_require at line 32 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitMismatchedOperators.pm
# once (51µs+256µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 114 of Perl/Critic/Utils.pm
# once (206µs+73µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 362 of Perl/Critic/Utils.pm
# once (20µs+192µs) by Module::Pluggable::Object::_require at line 116 of Perl/Critic/Policy/Documentation/RequirePodSections.pm
# once (136µs+52µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 404 of Perl/Critic/Utils.pm
# once (33µs+141µs) by Module::Pluggable::Object::_require at line 48 of Perl/Critic/Policy/NamingConventions/Capitalization.pm
# once (34µs+113µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/ControlStructures/ProhibitPostfixControls.pm
# once (87µs+37µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 223 of Perl/Critic/Utils.pm
# once (100µs+24µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 655 of Perl/Critic/Utils.pm
# once (78µs+22µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 477 of Perl/Critic/Utils.pm
# once (58µs+33µs) by Module::Pluggable::Object::_require at line 58 of Perl/Critic/Policy/CodeLayout/ProhibitParensWithBuiltins.pm
# once (25µs+65µs) by Module::Pluggable::Object::_require at line 25 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitMismatchedOperators.pm
# once (49µs+25µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 373 of Perl/Critic/Utils.pm
# once (21µs+43µs) by main::BEGIN@19 at line 39 of Perl/Critic/Command.pm
# once (24µs+32µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/TestingAndDebugging/RequireTestLabels.pm
# once (33µs+21µs) by Module::Pluggable::Object::_require at line 31 of Perl/Critic/Policy/Documentation/RequirePodSections.pm
# once (35µs+18µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 598 of Perl/Critic/Utils.pm
# once (25µs+22µs) by Perl::Critic::Utils::BEGIN@26 at line 86 of Perl/Critic/Utils/PPI.pm
# once (26µs+20µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitQuotesAsQuotelikeOperatorDelimiters.pm
# once (31µs+14µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 429 of Perl/Critic/Utils.pm
# once (28µs+16µs) by Module::Pluggable::Object::_require at line 44 of Perl/Critic/Policy/ValuesAndExpressions/RequireConstantVersion.pm
# once (25µs+19µs) by Module::Pluggable::Object::_require at line 56 of Perl/Critic/Policy/Documentation/RequirePodLinksIncludeText.pm
# once (26µs+17µs) by Module::Pluggable::Object::_require at line 45 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitMismatchedOperators.pm
# once (20µs+23µs) by Perl::Critic::Policy::NamingConventions::Capitalization::BEGIN@29 at line 28 of PPIx/Utilities/Statement.pm
# once (24µs+16µs) by Module::Pluggable::Object::_require at line 105 of Perl/Critic/Policy/ControlStructures/ProhibitNegativeExpressionsInUnlessAndUntilConditions.pm
# once (26µs+14µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 557 of Perl/Critic/Utils.pm
# once (20µs+19µs) by Perl::Critic::Config::BEGIN@26 at line 150 of Perl/Critic/UserProfile.pm
# once (23µs+16µs) by Module::Pluggable::Object::_require at line 28 of Perl/Critic/Policy/RegularExpressions/ProhibitEscapedMetacharacters.pm
# once (20µs+19µs) by Module::Pluggable::Object::_require at line 21 of Perl/Critic/Policy/ControlStructures/ProhibitLabelsWithSpecialBlockNames.pm
# once (23µs+16µs) by Module::Pluggable::Object::_require at line 368 of Perl/Critic/Policy/RegularExpressions/ProhibitUnusedCapture.pm
# once (20µs+18µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 1085 of Perl/Critic/Utils.pm
# once (19µs+18µs) by Module::Pluggable::Object::_require at line 30 of Perl/Critic/Policy/CodeLayout/ProhibitTrailingWhitespace.pm
# once (20µs+16µs) by Module::Pluggable::Object::_require at line 34 of Perl/Critic/Policy/RegularExpressions/ProhibitUnusedCapture.pm
# once (20µs+16µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 1017 of Perl/Critic/Utils.pm
# once (20µs+16µs) by Perl::Critic::Policy::BEGIN@45 at line 42 of Perl/Critic/PolicyParameter.pm
# once (20µs+15µs) by Module::Pluggable::Object::_require at line 42 of Perl/Critic/Policy/Documentation/RequirePodSections.pm
# once (19µs+16µs) by Module::Pluggable::Object::_require at line 298 of Perl/Critic/Policy/ErrorHandling/RequireCarping.pm
# once (17µs+15µs) by Module::Pluggable::Object::_require at line 25 of Perl/Critic/Policy/BuiltinFunctions/ProhibitBooleanGrep.pm
# once (16µs+16µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 416 of Perl/Critic/Utils.pm
# once (18µs+14µs) by Perl::Critic::Policy::Subroutines::ProhibitExcessComplexity::BEGIN@16 at line 31 of Perl/Critic/Utils/McCabe.pm
# once (16µs+15µs) by Module::Pluggable::Object::_require at line 22 of Perl/Critic/Policy/RegularExpressions/ProhibitCaptureWithoutTest.pm
# once (15µs+16µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitSpecialLiteralHeredocTerminator.pm
# once (17µs+14µs) by Module::Pluggable::Object::_require at line 198 of Perl/Critic/Policy/Subroutines/RequireArgUnpacking.pm
# once (16µs+15µs) by Module::Pluggable::Object::_require at line 25 of Perl/Critic/Policy/Objects/ProhibitIndirectSyntax.pm
# once (16µs+14µs) by Module::Pluggable::Object::_require at line 35 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitQuotesAsQuotelikeOperatorDelimiters.pm
# once (15µs+14µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/InputOutput/RequireBracedFileHandleWithPrint.pm
# once (16µs+14µs) by Module::Pluggable::Object::_require at line 77 of Perl/Critic/Policy/NamingConventions/Capitalization.pm
# once (15µs+14µs) by Module::Pluggable::Object::_require at line 27 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitMixedBooleanOperators.pm
# once (16µs+13µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/Variables/ProhibitMatchVars.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 31 of Perl/Critic/Policy/Variables/ProhibitEvilVariables.pm
# once (15µs+13µs) by Module::Pluggable::Object::_require at line 32 of Perl/Critic/Policy/ErrorHandling/RequireCheckingReturnValueOfEval.pm
# once (17µs+12µs) by Module::Pluggable::Object::_require at line 221 of Perl/Critic/Policy/Subroutines/RequireArgUnpacking.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/Variables/RequireLocalizedPunctuationVars.pm
# once (14µs+14µs) by Module::Pluggable::Object::_require at line 101 of Perl/Critic/Policy/RegularExpressions/ProhibitEnumeratedClasses.pm
# once (14µs+13µs) by Perl::Critic::Policy::Subroutines::ProhibitExcessComplexity::BEGIN@16 at line 34 of Perl/Critic/Utils/McCabe.pm
# once (14µs+13µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/Subroutines/ProhibitAmpersandSigils.pm
# once (13µs+14µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitMixedBooleanOperators.pm
# once (14µs+12µs) by Module::Pluggable::Object::_require at line 33 of Perl/Critic/Policy/ErrorHandling/RequireCheckingReturnValueOfEval.pm
# once (14µs+12µs) by Module::Pluggable::Object::_require at line 27 of Perl/Critic/Policy/ControlStructures/ProhibitUnreachableCode.pm
# once (13µs+13µs) by Module::Pluggable::Object::_require at line 27 of Perl/Critic/Policy/CodeLayout/ProhibitParensWithBuiltins.pm
# once (13µs+12µs) by Module::Pluggable::Object::_require at line 27 of Perl/Critic/Policy/Modules/ProhibitConditionalUseStatements.pm
# once (13µs+12µs) by Perl::Critic::Command::BEGIN@26 at line 66 of Perl/Critic/Utils/Constants.pm
# once (12µs+12µs) by Module::Pluggable::Object::_require at line 21 of Perl/Critic/Policy/ControlStructures/ProhibitUnreachableCode.pm
# once (13µs+12µs) by Perl::Critic::Exception::Parse::BEGIN@18 at line 1050 of Perl/Critic/Utils.pm
# once (12µs+12µs) by Module::Pluggable::Object::_require at line 35 of Perl/Critic/Policy/InputOutput/RequireBriefOpen.pm
# once (13µs+11µs) by Module::Pluggable::Object::_require at line 24 of Perl/Critic/Policy/ControlStructures/ProhibitUnreachableCode.pm
# once (12µs+12µs) by Module::Pluggable::Object::_require at line 33 of Perl/Critic/Policy/RegularExpressions/ProhibitUnusedCapture.pm
# once (12µs+12µs) by Module::Pluggable::Object::_require at line 32 of Perl/Critic/Policy/Subroutines/ProhibitUnusedPrivateSubroutines.pm
# once (12µs+12µs) by Module::Pluggable::Object::_require at line 25 of Perl/Critic/Policy/Subroutines/RequireFinalReturn.pm
# once (13µs+11µs) by Module::Pluggable::Object::_require at line 26 of Perl/Critic/Policy/BuiltinFunctions/ProhibitBooleanGrep.pm
# once (12µs+11µs) by Module::Pluggable::Object::_require at line 23 of Perl/Critic/Policy/RegularExpressions/ProhibitCaptureWithoutTest.pm
# once (12µs+11µs) by Module::Pluggable::Object::_require at line 29 of Perl/Critic/Policy/InputOutput/RequireEncodingWithUTF8Layer.pm
# once (11µs+12µs) by Module::Pluggable::Object::_require at line 25 of Perl/Critic/Policy/Subroutines/ProhibitBuiltinHomonyms.pm
# once (11µs+11µs) by Module::Pluggable::Object::_require at line 25 of Perl/Critic/Policy/ValuesAndExpressions/ProhibitMixedBooleanOperators.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 41 of Perl/Critic/Policy/InputOutput/RequireBriefOpen.pm
# once (10µs+11µs) by Module::Pluggable::Object::_require at line 29 of Perl/Critic/Policy/Subroutines/ProhibitAmpersandSigils.pm
# once (9µs+11µs) by Module::Pluggable::Object::_require at line 224 of Perl/Critic/Policy/Subroutines/RequireArgUnpacking.pm
# once (9µs+10µs) by Module::Pluggable::Object::_require at line 88 of Perl/Critic/Policy/NamingConventions/Capitalization.pm
# once (9µs+10µs) by Module::Pluggable::Object::_require at line 499 of Perl/Critic/Policy/RegularExpressions/ProhibitUnusedCapture.pm
# once (8µs+10µs) by Module::Pluggable::Object::_require at line 201 of Perl/Critic/Policy/Subroutines/RequireArgUnpacking.pm | ||||
149 | 157 | 161µs | 157 | 442µs | my $badtype = _is_badtype(ref tied %{$_[0]}); # spent 442µs making 157 calls to Readonly::_is_badtype, avg 3µs/call |
150 | 157 | 5µs | croak "$REASSIGN $badtype" if $badtype; | ||
151 | 157 | 20µs | my $href = shift; | ||
152 | 157 | 361µs | 27 | 32µs | my @values = @_; # spent 29µs making 25 calls to Readonly::Scalar::FETCH, avg 1µs/call
# spent 3µs making 2 calls to Readonly::Hash::FETCH, avg 2µs/call |
153 | |||||
154 | # If only one value, and it's a hashref, expand it | ||||
155 | 157 | 221µs | if (@_ == 1 && ref $_[0] eq 'HASH') { | ||
156 | @values = %{$_[0]}; | ||||
157 | } | ||||
158 | |||||
159 | # otherwise, must have an even number of values | ||||
160 | 157 | 54µs | croak $ODDHASH unless (@values % 2 == 0); | ||
161 | |||||
162 | # Recursively check passed elements for references; if any, make them Readonly | ||||
163 | 157 | 72µs | foreach (@values) { | ||
164 | 3268 | 545µs | if (ref eq 'SCALAR') { Scalar my $v => $$_; $_ = \$v } | ||
165 | 112 | 138µs | 82 | 1.10ms | elsif (ref eq 'ARRAY') { Array my @v => @$_; $_ = \@v } # spent 1.07ms making 56 calls to Readonly::Array, avg 19µs/call
# spent 33µs making 24 calls to Readonly::Array::FETCH, avg 1µs/call
# spent 2µs making 2 calls to Readonly::Array::FETCHSIZE, avg 1µs/call |
166 | 150 | 114µs | 75 | 0s | elsif (ref eq 'HASH') { Hash my %v => $_; $_ = \%v } # spent 4.75ms making 75 calls to Readonly::Hash, avg 63µs/call, recursion: max depth 1, sum of overlapping time 4.75ms |
167 | } | ||||
168 | 157 | 884µs | 157 | 1.63ms | return tie %$href, 'Readonly::Hash', @values; # spent 1.63ms making 157 calls to Readonly::Hash::TIEHASH, avg 10µs/call |
169 | } | ||||
170 | |||||
171 | # Common entry-point for all supported data types | ||||
172 | 1 | 279µs | eval q{sub Readonly} . ($] < 5.008 ? '' : '(\[$@%]@)') . <<'SUB_READONLY'; | ||
173 | { | ||||
174 | if (ref $_[0] eq 'SCALAR') { | ||||
175 | croak $MODIFY if is_sv_readonly ${$_[0]}; | ||||
176 | my $badtype = _is_badtype(ref tied ${$_[0]}); | ||||
177 | croak "$REASSIGN $badtype" if $badtype; | ||||
178 | croak "Readonly scalar must have only one value" if @_ > 2; | ||||
179 | my $tieobj = eval { tie ${$_[0]}, 'Readonly::Scalar', $_[1] }; | ||||
180 | |||||
181 | # Tie may have failed because user tried to tie a constant, or we screwed up somehow. | ||||
182 | if ($@) { | ||||
183 | croak $MODIFY | ||||
184 | if $@ =~ /^$MODIFY at/; # Point the finger at the user. | ||||
185 | die "$@\n"; # Not a modify read-only message; must be our fault. | ||||
186 | } | ||||
187 | return $tieobj; | ||||
188 | } | ||||
189 | elsif (ref $_[0] eq 'ARRAY') { | ||||
190 | my $aref = shift; | ||||
191 | return Array @$aref, @_; | ||||
192 | } | ||||
193 | elsif (ref $_[0] eq 'HASH') { | ||||
194 | my $href = shift; | ||||
195 | croak $ODDHASH if @_ % 2 != 0 && !(@_ == 1 && ref $_[0] eq 'HASH'); | ||||
196 | return Hash %$href, @_; | ||||
197 | } | ||||
198 | elsif (ref $_[0]) { | ||||
199 | croak "Readonly only supports scalar, array, and hash variables."; | ||||
200 | } | ||||
201 | else { | ||||
202 | croak "First argument to Readonly must be a reference."; | ||||
203 | } | ||||
204 | } | ||||
205 | SUB_READONLY | ||||
206 | 1 | 6µs | 1; | ||
207 | |||||
208 | =head1 NAME | ||||
209 | |||||
210 | Readonly - Facility for creating read-only scalars, arrays, hashes | ||||
211 | |||||
212 | =head1 Synopsis | ||||
213 | |||||
214 | use Readonly; | ||||
215 | |||||
216 | # Read-only scalar | ||||
217 | Readonly::Scalar $sca => $initial_value; | ||||
218 | Readonly::Scalar my $sca => $initial_value; | ||||
219 | |||||
220 | # Read-only array | ||||
221 | Readonly::Array @arr => @values; | ||||
222 | Readonly::Array my @arr => @values; | ||||
223 | |||||
224 | # Read-only hash | ||||
225 | Readonly::Hash %has => (key => value, key => value, ...); | ||||
226 | Readonly::Hash my %has => (key => value, key => value, ...); | ||||
227 | # or: | ||||
228 | Readonly::Hash %has => {key => value, key => value, ...}; | ||||
229 | |||||
230 | # You can use the read-only variables like any regular variables: | ||||
231 | print $sca; | ||||
232 | $something = $sca + $arr[2]; | ||||
233 | next if $has{$some_key}; | ||||
234 | |||||
235 | # But if you try to modify a value, your program will die: | ||||
236 | $sca = 7; | ||||
237 | push @arr, 'seven'; | ||||
238 | delete $has{key}; | ||||
239 | # The error message is "Modification of a read-only value attempted" | ||||
240 | |||||
241 | # Alternate form (Perl 5.8 and later) | ||||
242 | Readonly $sca => $initial_value; | ||||
243 | Readonly my $sca => $initial_value; | ||||
244 | Readonly @arr => @values; | ||||
245 | Readonly my @arr => @values; | ||||
246 | Readonly %has => (key => value, key => value, ...); | ||||
247 | Readonly my %has => (key => value, key => value, ...); | ||||
248 | |||||
249 | # Alternate form (for Perls earlier than v5.8) | ||||
250 | Readonly \$sca => $initial_value; | ||||
251 | Readonly \my $sca => $initial_value; | ||||
252 | Readonly \@arr => @values; | ||||
253 | Readonly \my @arr => @values; | ||||
254 | Readonly \%has => (key => value, key => value, ...); | ||||
255 | Readonly \my %has => (key => value, key => value, ...); | ||||
256 | |||||
257 | =head1 Description | ||||
258 | |||||
259 | This is a facility for creating non-modifiable variables. This is useful for | ||||
260 | configuration files, headers, etc. It can also be useful as a development and | ||||
261 | debugging tool, for catching updates to variables that should not be changed. | ||||
262 | |||||
263 | If any of the values you pass to C<Scalar>, C<Array>, or C<Hash> are | ||||
264 | references, then those functions recurse over the data structures, marking | ||||
265 | everything as Readonly. Usually, this is what you want: the entire structure | ||||
266 | nonmodifiable. If you want only the top level to be Readonly, use the | ||||
267 | alternate C<Scalar1>, C<Array1> and C<Hash1> functions. | ||||
268 | |||||
269 | Please note that most users of Readonly will also want to install a companion | ||||
270 | module Readonly::XS. See the L</Cons> section below for more details. | ||||
271 | |||||
272 | =head1 Comparison with "use constant" | ||||
273 | |||||
274 | Perl provides a facility for creating constant values, via the L<constant> | ||||
275 | pragma. There are several problems with this pragma. | ||||
276 | |||||
277 | =over 2 | ||||
278 | |||||
279 | =item * The constants created have no leading sigils. | ||||
280 | |||||
281 | =item * These constants cannot be interpolated into strings. | ||||
282 | |||||
283 | =item * Syntax can get dicey sometimes. For example: | ||||
284 | |||||
285 | use constant CARRAY => (2, 3, 5, 7, 11, 13); | ||||
286 | $a_prime = CARRAY[2]; # wrong! | ||||
287 | $a_prime = (CARRAY)[2]; # right -- MUST use parentheses | ||||
288 | |||||
289 | =item * You have to be very careful in places where barewords are allowed. | ||||
290 | |||||
291 | For example: | ||||
292 | |||||
293 | use constant SOME_KEY => 'key'; | ||||
294 | %hash = (key => 'value', other_key => 'other_value'); | ||||
295 | $some_value = $hash{SOME_KEY}; # wrong! | ||||
296 | $some_value = $hash{+SOME_KEY}; # right | ||||
297 | |||||
298 | (who thinks to use a unary plus when using a hash?) | ||||
299 | |||||
300 | =item * C<use constant> works for scalars and arrays, not hashes. | ||||
301 | |||||
302 | =item * These constants are global ot the package in which they're declared; | ||||
303 | cannot be lexically scoped. | ||||
304 | |||||
305 | =item * Works only at compile time. | ||||
306 | |||||
307 | =item * Can be overridden: | ||||
308 | |||||
309 | use constant PI => 3.14159; | ||||
310 | ... | ||||
311 | use constant PI => 2.71828; | ||||
312 | |||||
313 | (this does generate a warning, however, if you have warnings enabled). | ||||
314 | |||||
315 | =item * It is very difficult to make and use deep structures (complex data | ||||
316 | structures) with C<use constant>. | ||||
317 | |||||
318 | =back | ||||
319 | |||||
320 | =head1 Comparison with typeglob constants | ||||
321 | |||||
322 | Another popular way to create read-only scalars is to modify the symbol | ||||
323 | table entry for the variable by using a typeglob: | ||||
324 | |||||
325 | *a = \'value'; | ||||
326 | |||||
327 | This works fine, but it only works for global variables ("my" | ||||
328 | variables have no symbol table entry). Also, the following similar | ||||
329 | constructs do B<not> work: | ||||
330 | |||||
331 | *a = [1, 2, 3]; # Does NOT create a read-only array | ||||
332 | *a = { a => 'A'}; # Does NOT create a read-only hash | ||||
333 | |||||
334 | =head1 Pros | ||||
335 | |||||
336 | Readonly.pm, on the other hand, will work with global variables and | ||||
337 | with lexical ("my") variables. It will create scalars, arrays, or | ||||
338 | hashes, all of which look and work like normal, read-write Perl | ||||
339 | variables. You can use them in scalar context, in list context; you | ||||
340 | can take references to them, pass them to functions, anything. | ||||
341 | |||||
342 | Readonly.pm also works well with complex data structures, allowing you | ||||
343 | to tag the whole structure as nonmodifiable, or just the top level. | ||||
344 | |||||
345 | Also, Readonly variables may not be reassigned. The following code will die: | ||||
346 | |||||
347 | Readonly::Scalar $pi => 3.14159; | ||||
348 | ... | ||||
349 | Readonly::Scalar $pi => 2.71828; | ||||
350 | |||||
351 | =head1 Cons | ||||
352 | |||||
353 | Readonly.pm does impose a performance penalty. It's pretty slow. How | ||||
354 | slow? Run the C<eg/benchmark.pl> script that comes with Readonly. On my | ||||
355 | test system, "use constant", typeglob constants, and regular | ||||
356 | read/write Perl variables were all about the same speed, and | ||||
357 | Readonly.pm constants were about 1/20 the speed. | ||||
358 | |||||
359 | However, there is relief. There is a companion module available, | ||||
360 | Readonly::XS. If it is installed on your system, Readonly.pm uses it | ||||
361 | to make read-only scalars much faster. With Readonly::XS, Readonly | ||||
362 | scalars are as fast as the other types of variables. Readonly arrays | ||||
363 | and hashes will still be relatively slow. But it's likely that most | ||||
364 | of your Readonly variables will be scalars. | ||||
365 | |||||
366 | If you can't use Readonly::XS (for example, if you don't have a C | ||||
367 | compiler, or your perl is statically linked and you don't want to | ||||
368 | re-link it), you have to decide whether the benefits of Readonly | ||||
369 | variables outweigh the speed issue. For most configuration variables | ||||
370 | (and other things that Readonly is likely to be useful for), the speed | ||||
371 | issue is probably not really a big problem. But benchmark your | ||||
372 | program if it might be. If it turns out to be a problem, you may | ||||
373 | still want to use Readonly.pm during development, to catch changes to | ||||
374 | variables that should not be changed, and then remove it for | ||||
375 | production: | ||||
376 | |||||
377 | # For testing: | ||||
378 | Readonly::Scalar $Foo_Directory => '/usr/local/foo'; | ||||
379 | Readonly::Scalar $Bar_Directory => '/usr/local/bar'; | ||||
380 | # $Foo_Directory = '/usr/local/foo'; | ||||
381 | # $Bar_Directory = '/usr/local/bar'; | ||||
382 | |||||
383 | # For production: | ||||
384 | # Readonly::Scalar $Foo_Directory => '/usr/local/foo'; | ||||
385 | # Readonly::Scalar $Bar_Directory => '/usr/local/bar'; | ||||
386 | $Foo_Directory = '/usr/local/foo'; | ||||
387 | $Bar_Directory = '/usr/local/bar'; | ||||
388 | |||||
389 | =head1 Functions | ||||
390 | |||||
391 | =over 4 | ||||
392 | |||||
393 | =item Readonly::Scalar $var => $value; | ||||
394 | |||||
395 | Creates a nonmodifiable scalar, C<$var>, and assigns a value of | ||||
396 | C<$value> to it. Thereafter, its value may not be changed. Any | ||||
397 | attempt to modify the value will cause your program to die. | ||||
398 | |||||
399 | A value I<must> be supplied. If you want the variable to have | ||||
400 | C<undef> as its value, you must specify C<undef>. | ||||
401 | |||||
402 | If C<$value> is a reference to a scalar, array, or hash, then this | ||||
403 | function will mark the scalar, array, or hash it points to as being | ||||
404 | Readonly as well, and it will recursively traverse the structure, | ||||
405 | marking the whole thing as Readonly. Usually, this is what you want. | ||||
406 | However, if you want only the C<$value> marked as Readonly, use | ||||
407 | C<Scalar1>. | ||||
408 | |||||
409 | If $var is already a Readonly variable, the program will die with | ||||
410 | an error about reassigning Readonly variables. | ||||
411 | |||||
412 | =item Readonly::Array @arr => (value, value, ...); | ||||
413 | |||||
414 | Creates a nonmodifiable array, C<@arr>, and assigns the specified list | ||||
415 | of values to it. Thereafter, none of its values may be changed; the | ||||
416 | array may not be lengthened or shortened or spliced. Any attempt to | ||||
417 | do so will cause your program to die. | ||||
418 | |||||
419 | If any of the values passed is a reference to a scalar, array, or hash, | ||||
420 | then this function will mark the scalar, array, or hash it points to as | ||||
421 | being Readonly as well, and it will recursively traverse the structure, | ||||
422 | marking the whole thing as Readonly. Usually, this is what you want. | ||||
423 | However, if you want only the hash C<%@arr> itself marked as Readonly, | ||||
424 | use C<Array1>. | ||||
425 | |||||
426 | If @arr is already a Readonly variable, the program will die with | ||||
427 | an error about reassigning Readonly variables. | ||||
428 | |||||
429 | =item Readonly::Hash %h => (key => value, key => value, ...); | ||||
430 | |||||
431 | =item Readonly::Hash %h => {key => value, key => value, ...}; | ||||
432 | |||||
433 | Creates a nonmodifiable hash, C<%h>, and assigns the specified keys | ||||
434 | and values to it. Thereafter, its keys or values may not be changed. | ||||
435 | Any attempt to do so will cause your program to die. | ||||
436 | |||||
437 | A list of keys and values may be specified (with parentheses in the | ||||
438 | synopsis above), or a hash reference may be specified (curly braces in | ||||
439 | the synopsis above). If a list is specified, it must have an even | ||||
440 | number of elements, or the function will die. | ||||
441 | |||||
442 | If any of the values is a reference to a scalar, array, or hash, then | ||||
443 | this function will mark the scalar, array, or hash it points to as | ||||
444 | being Readonly as well, and it will recursively traverse the | ||||
445 | structure, marking the whole thing as Readonly. Usually, this is what | ||||
446 | you want. However, if you want only the hash C<%h> itself marked as | ||||
447 | Readonly, use C<Hash1>. | ||||
448 | |||||
449 | If %h is already a Readonly variable, the program will die with | ||||
450 | an error about reassigning Readonly variables. | ||||
451 | |||||
452 | =item Readonly $var => $value; | ||||
453 | |||||
454 | =item Readonly @arr => (value, value, ...); | ||||
455 | |||||
456 | =item Readonly %h => (key => value, ...); | ||||
457 | |||||
458 | =item Readonly %h => {key => value, ...}; | ||||
459 | |||||
460 | The C<Readonly> function is an alternate to the C<Scalar>, C<Array>, | ||||
461 | and C<Hash> functions. It has the advantage (if you consider it an | ||||
462 | advantage) of being one function. That may make your program look | ||||
463 | neater, if you're initializing a whole bunch of constants at once. | ||||
464 | You may or may not prefer this uniform style. | ||||
465 | |||||
466 | It has the disadvantage of having a slightly different syntax for | ||||
467 | versions of Perl prior to 5.8. For earlier versions, you must supply | ||||
468 | a backslash, because it requires a reference as the first parameter. | ||||
469 | |||||
470 | Readonly \$var => $value; | ||||
471 | Readonly \@arr => (value, value, ...); | ||||
472 | Readonly \%h => (key => value, ...); | ||||
473 | Readonly \%h => {key => value, ...}; | ||||
474 | |||||
475 | You may or may not consider this ugly. | ||||
476 | |||||
477 | =item Readonly::Scalar1 $var => $value; | ||||
478 | |||||
479 | =item Readonly::Array1 @arr => (value, value, ...); | ||||
480 | |||||
481 | =item Readonly::Hash1 %h => (key => value, key => value, ...); | ||||
482 | |||||
483 | =item Readonly::Hash1 %h => {key => value, key => value, ...}; | ||||
484 | |||||
485 | These alternate functions create shallow Readonly variables, instead | ||||
486 | of deep ones. For example: | ||||
487 | |||||
488 | Readonly::Array1 @shal => (1, 2, {perl=>'Rules', java=>'Bites'}, 4, 5); | ||||
489 | Readonly::Array @deep => (1, 2, {perl=>'Rules', java=>'Bites'}, 4, 5); | ||||
490 | |||||
491 | $shal[1] = 7; # error | ||||
492 | $shal[2]{APL}='Weird'; # Allowed! since the hash isn't Readonly | ||||
493 | $deep[1] = 7; # error | ||||
494 | $deep[2]{APL}='Weird'; # error, since the hash is Readonly | ||||
495 | |||||
496 | =back | ||||
497 | |||||
498 | =head1 Examples | ||||
499 | |||||
500 | These are a few very simple examples: | ||||
501 | |||||
502 | =head2 Scalars | ||||
503 | |||||
504 | A plain old read-only value | ||||
505 | |||||
506 | Readonly::Scalar $a => "A string value"; | ||||
507 | |||||
508 | The value need not be a compile-time constant: | ||||
509 | |||||
510 | Readonly::Scalar $a => $computed_value; | ||||
511 | |||||
512 | =head2 Arrays/Lists | ||||
513 | |||||
514 | A read-only array: | ||||
515 | |||||
516 | Readonly::Array @a => (1, 2, 3, 4); | ||||
517 | |||||
518 | The parentheses are optional: | ||||
519 | |||||
520 | Readonly::Array @a => 1, 2, 3, 4; | ||||
521 | |||||
522 | You can use Perl's built-in array quoting syntax: | ||||
523 | |||||
524 | Readonly::Array @a => qw/1 2 3 4/; | ||||
525 | |||||
526 | You can initialize a read-only array from a variable one: | ||||
527 | |||||
528 | Readonly::Array @a => @computed_values; | ||||
529 | |||||
530 | A read-only array can be empty, too: | ||||
531 | |||||
532 | Readonly::Array @a => (); | ||||
533 | Readonly::Array @a; # equivalent | ||||
534 | |||||
535 | =head2 Hashes | ||||
536 | |||||
537 | Typical usage: | ||||
538 | |||||
539 | Readonly::Hash %a => (key1 => 'value1', key2 => 'value2'); | ||||
540 | |||||
541 | A read-only hash can be initialized from a variable one: | ||||
542 | |||||
543 | Readonly::Hash %a => %computed_values; | ||||
544 | |||||
545 | A read-only hash can be empty: | ||||
546 | |||||
547 | Readonly::Hash %a => (); | ||||
548 | Readonly::Hash %a; # equivalent | ||||
549 | |||||
550 | If you pass an odd number of values, the program will die: | ||||
551 | |||||
552 | Readonly::Hash %a => (key1 => 'value1', "value2"); | ||||
553 | # This dies with "May not store an odd number of values in a hash" | ||||
554 | |||||
555 | =head1 Exports | ||||
556 | |||||
557 | Historically, this module exports the C<Readonly> symbol into the calling | ||||
558 | program's namespace by default. The following symbols are also available for | ||||
559 | import into your program, if you like: C<Scalar>, C<Scalar1>, C<Array>, | ||||
560 | C<Array1>, C<Hash>, and C<Hash1>. | ||||
561 | |||||
562 | =head1 Requirements | ||||
563 | |||||
564 | L<Readonly::XS> is recommended but not required. There are no non-core | ||||
565 | requirements. | ||||
566 | |||||
567 | =head1 Bug Reports | ||||
568 | |||||
569 | If email is better for you, L<my address is mentioned below|/"Author"> but I | ||||
570 | would rather have bugs sent through the issue tracker found at | ||||
571 | http://github.com/sanko/readonly/issues. | ||||
572 | |||||
573 | Please check the TODO file included with this distribution in case your bug | ||||
574 | is already known (...I probably won't file bug reports to myself). | ||||
575 | |||||
576 | =head1 Acknowladgements | ||||
577 | |||||
578 | Thanks to Slaven Rezic for the idea of one common function (Readonly) for all | ||||
579 | three types of variables (13 April 2002). | ||||
580 | |||||
581 | Thanks to Ernest Lergon for the idea (and initial code) for deeply-Readonly | ||||
582 | data structures (21 May 2002). | ||||
583 | |||||
584 | Thanks to Damian Conway for the idea (and code) for making the Readonly | ||||
585 | function work a lot smoother under perl 5.8+. | ||||
586 | |||||
587 | =head1 Author | ||||
588 | |||||
589 | Sanko Robinson <sanko@cpan.org> - http://sankorobinson.com/ | ||||
590 | |||||
591 | CPAN ID: SANKO | ||||
592 | |||||
593 | Original author: Eric J. Roode, roode@cpan.org | ||||
594 | |||||
595 | =head1 License and Legal | ||||
596 | |||||
597 | Copyright (C) 2013 by Sanko Robinson <sanko@cpan.org> | ||||
598 | |||||
599 | Copyright (c) 2001-2004 by Eric J. Roode. All Rights Reserved. | ||||
600 | |||||
601 | This module is free software; you can redistribute it and/or modify it under | ||||
602 | the same terms as Perl itself. | ||||
603 | |||||
604 | =cut | ||||
# spent 232µs within Readonly::CORE:subst which was called 792 times, avg 293ns/call:
# 792 times (232µs+0s) by Readonly::_is_badtype at line 49, avg 293ns/call |