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

Filename/Users/timbo/perl5/perlbrew/perls/perl-5.18.2/lib/site_perl/5.18.2/Readonly.pm
StatementsExecuted 14855 statements in 17.8ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
42342315111.2ms21.2msReadonly::::ScalarReadonly::Scalar
15783446.13ms9.33msReadonly::::HashReadonly::Hash (recurses: max depth 1, inclusive time 4.75ms)
21249362.41ms4.79msReadonly::::ArrayReadonly::Array (recurses: max depth 1, inclusive time 343µs)
792312.15ms2.39msReadonly::::_is_badtypeReadonly::_is_badtype
42311346µs346µsReadonly::::is_sv_readonlyReadonly::is_sv_readonly
79211232µs232µsReadonly::::CORE:substReadonly::CORE:subst (opcode)
11115µs15µsReadonly::::BEGIN@2Readonly::BEGIN@2
1117µs19µsReadonly::::BEGIN@3Readonly::BEGIN@3
1117µs22µsReadonly::::BEGIN@7Readonly::BEGIN@7
1116µs23µsReadonly::::BEGIN@24Readonly::BEGIN@24
1116µs59µsReadonly::::BEGIN@8Readonly::BEGIN@8
1116µs40µsReadonly::::BEGIN@27Readonly::BEGIN@27
0000s0sReadonly::::Array1Readonly::Array1
0000s0sReadonly::::Hash1Readonly::Hash1
0000s0sReadonly::::Scalar1Readonly::Scalar1
0000s0sReadonly::::croakReadonly::croak
0000s0sReadonly::::make_sv_readonlyReadonly::make_sv_readonly
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Readonly;
2241µs115µs
# spent 15µs within Readonly::BEGIN@2 which was called: # once (15µs+0s) by Perl::Critic::Command::BEGIN@15 at line 2
use 5.006;
# spent 15µs making 1 call to Readonly::BEGIN@2
3220µs231µ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
use strict;
# 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';
7222µs236µ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
use Exporter;
# spent 22µs making 1 call to Readonly::BEGIN@7 # spent 15µs making 1 call to Exporter::import
8294µs2111µ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
use vars qw/@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS/;
# spent 59µs making 1 call to Readonly::BEGIN@8 # spent 52µs making 1 call to vars::import
915µspush @ISA, 'Exporter';
101400nspush @EXPORT, qw/Readonly/;
1111µspush @EXPORT_OK, qw/Scalar Array Hash Scalar1 Array1 Hash1/;
121200nsour $VERSION = '1.04';
13
14# Autocroak (Thanks, MJD)
15# Only load Carp.pm if module is croaking.
16sub croak {
17 require Carp;
18 goto &Carp::croak;
19}
20
21# These functions may be overridden by Readonly::XS, if installed.
22423915µ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
sub is_sv_readonly ($) {0}
23sub make_sv_readonly ($) { die "make_sv_readonly called but not overridden" }
24222µs239µ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
use vars qw/$XSokay/; # Set to true in Readonly::XS, if available
# 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
2721.09ms274µ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
use vars qw/$MODIFY $REASSIGN $ODDHASH/;
# spent 40µs making 1 call to Readonly::BEGIN@27 # spent 34µs making 1 call to vars::import
281200ns$MODIFY = 'Modification of a read-only value attempted';
291100ns$REASSIGN = 'Attempt to reassign a readonly';
301200ns$ODDHASH = 'May not store an odd number of values in a hash';
31
32# See if we can use the XS stuff.
33128µseval '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
361156µsrequire Readonly::Array;
371306µsrequire Readonly::Hash;
381191µsrequire Readonly::Scalar;
39
40# Predeclare the following, so we can use them recursively
41sub Scalar ($$);
42sub Array (\@;@);
43sub 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
sub _is_badtype {
48792175µs my $type = $_[0];
497921.45ms792232µs return lc $type if $type =~ s/^Readonly:://;
# spent 232µs making 792 calls to Readonly::CORE:subst, avg 293ns/call
507921.12ms return;
51}
52
53# Shallow Readonly scalar
54sub 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
76sub 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
84sub 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
sub Scalar ($$) {
101423419µs423346µs croak "$REASSIGN scalar" if is_sv_readonly $_[0];
# spent 346µs making 423 calls to Readonly::is_sv_readonly, avg 817ns/call
102423434µs4231.31ms my $badtype = _is_badtype(ref tied $_[0]);
# spent 1.31ms making 423 calls to Readonly::_is_badtype, avg 3µs/call
10342326µs croak "$REASSIGN $badtype" if $badtype;
104423116µs710µ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
107423222µs foreach ($value) {
108423422µs if (ref eq 'SCALAR') { Scalar my $v => $$_; $_ = \$v }
109180188µs901.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
11442314µs if ($XSokay) {
115 $_[0] = $value;
116 make_sv_readonly $_[0];
117 return;
118 }
119
120 # pure-perl method: tied scalar
1218461.21ms4236.53ms my $tieobj = eval { tie $_[0], 'Readonly::Scalar', $value };
# spent 6.53ms making 423 calls to Readonly::Scalar::TIESCALAR, avg 15µs/call
12242319µs if ($@) {
123 croak "$REASSIGN scalar" if substr($@, 0, 43) eq $MODIFY;
124 die $@; # some other error?
125 }
1264231.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
sub Array (\@;@) {
131212213µs212632µs my $badtype = _is_badtype(ref tied @{$_[0]});
# spent 632µs making 212 calls to Readonly::_is_badtype, avg 3µs/call
13221210µs croak "$REASSIGN $badtype" if $badtype;
13321230µs my $aref = shift;
134212238µs my @values = @_;
135
136# Recursively check passed elements for references; if any, make them Readonly
13721294µs foreach (@values) {
1381100287µs if (ref eq 'SCALAR') { Scalar my $v => $$_; $_ = \$v }
1394034µs200s 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
1442123.93ms2121.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
sub Hash (\%;@) {
149157161µs157442µs my $badtype = _is_badtype(ref tied %{$_[0]});
# spent 442µs making 157 calls to Readonly::_is_badtype, avg 3µs/call
1501575µs croak "$REASSIGN $badtype" if $badtype;
15115720µs my $href = shift;
152157361µs2732µ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
155157221µs if (@_ == 1 && ref $_[0] eq 'HASH') {
156 @values = %{$_[0]};
157 }
158
159 # otherwise, must have an even number of values
16015754µs croak $ODDHASH unless (@values % 2 == 0);
161
162# Recursively check passed elements for references; if any, make them Readonly
16315772µs foreach (@values) {
1643268545µs if (ref eq 'SCALAR') { Scalar my $v => $$_; $_ = \$v }
165112138µs821.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
166150114µs750s 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 }
168157884µs1571.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
1721279µseval 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}
205SUB_READONLY
20616µs1;
207
208=head1 NAME
209
210Readonly - 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
259This is a facility for creating non-modifiable variables. This is useful for
260configuration files, headers, etc. It can also be useful as a development and
261debugging tool, for catching updates to variables that should not be changed.
262
263If any of the values you pass to C<Scalar>, C<Array>, or C<Hash> are
264references, then those functions recurse over the data structures, marking
265everything as Readonly. Usually, this is what you want: the entire structure
266nonmodifiable. If you want only the top level to be Readonly, use the
267alternate C<Scalar1>, C<Array1> and C<Hash1> functions.
268
269Please note that most users of Readonly will also want to install a companion
270module Readonly::XS. See the L</Cons> section below for more details.
271
272=head1 Comparison with "use constant"
273
274Perl provides a facility for creating constant values, via the L<constant>
275pragma. 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
291For 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;
303cannot 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
316structures) with C<use constant>.
317
318=back
319
320=head1 Comparison with typeglob constants
321
322Another popular way to create read-only scalars is to modify the symbol
323table entry for the variable by using a typeglob:
324
325 *a = \'value';
326
327This works fine, but it only works for global variables ("my"
328variables have no symbol table entry). Also, the following similar
329constructs 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
336Readonly.pm, on the other hand, will work with global variables and
337with lexical ("my") variables. It will create scalars, arrays, or
338hashes, all of which look and work like normal, read-write Perl
339variables. You can use them in scalar context, in list context; you
340can take references to them, pass them to functions, anything.
341
342Readonly.pm also works well with complex data structures, allowing you
343to tag the whole structure as nonmodifiable, or just the top level.
344
345Also, 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
353Readonly.pm does impose a performance penalty. It's pretty slow. How
354slow? Run the C<eg/benchmark.pl> script that comes with Readonly. On my
355test system, "use constant", typeglob constants, and regular
356read/write Perl variables were all about the same speed, and
357Readonly.pm constants were about 1/20 the speed.
358
359However, there is relief. There is a companion module available,
360Readonly::XS. If it is installed on your system, Readonly.pm uses it
361to make read-only scalars much faster. With Readonly::XS, Readonly
362scalars are as fast as the other types of variables. Readonly arrays
363and hashes will still be relatively slow. But it's likely that most
364of your Readonly variables will be scalars.
365
366If you can't use Readonly::XS (for example, if you don't have a C
367compiler, or your perl is statically linked and you don't want to
368re-link it), you have to decide whether the benefits of Readonly
369variables outweigh the speed issue. For most configuration variables
370(and other things that Readonly is likely to be useful for), the speed
371issue is probably not really a big problem. But benchmark your
372program if it might be. If it turns out to be a problem, you may
373still want to use Readonly.pm during development, to catch changes to
374variables that should not be changed, and then remove it for
375production:
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
395Creates a nonmodifiable scalar, C<$var>, and assigns a value of
396C<$value> to it. Thereafter, its value may not be changed. Any
397attempt to modify the value will cause your program to die.
398
399A value I<must> be supplied. If you want the variable to have
400C<undef> as its value, you must specify C<undef>.
401
402If C<$value> is a reference to a scalar, array, or hash, then this
403function will mark the scalar, array, or hash it points to as being
404Readonly as well, and it will recursively traverse the structure,
405marking the whole thing as Readonly. Usually, this is what you want.
406However, if you want only the C<$value> marked as Readonly, use
407C<Scalar1>.
408
409If $var is already a Readonly variable, the program will die with
410an error about reassigning Readonly variables.
411
412=item Readonly::Array @arr => (value, value, ...);
413
414Creates a nonmodifiable array, C<@arr>, and assigns the specified list
415of values to it. Thereafter, none of its values may be changed; the
416array may not be lengthened or shortened or spliced. Any attempt to
417do so will cause your program to die.
418
419If any of the values passed is a reference to a scalar, array, or hash,
420then this function will mark the scalar, array, or hash it points to as
421being Readonly as well, and it will recursively traverse the structure,
422marking the whole thing as Readonly. Usually, this is what you want.
423However, if you want only the hash C<%@arr> itself marked as Readonly,
424use C<Array1>.
425
426If @arr is already a Readonly variable, the program will die with
427an 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
433Creates a nonmodifiable hash, C<%h>, and assigns the specified keys
434and values to it. Thereafter, its keys or values may not be changed.
435Any attempt to do so will cause your program to die.
436
437A list of keys and values may be specified (with parentheses in the
438synopsis above), or a hash reference may be specified (curly braces in
439the synopsis above). If a list is specified, it must have an even
440number of elements, or the function will die.
441
442If any of the values is a reference to a scalar, array, or hash, then
443this function will mark the scalar, array, or hash it points to as
444being Readonly as well, and it will recursively traverse the
445structure, marking the whole thing as Readonly. Usually, this is what
446you want. However, if you want only the hash C<%h> itself marked as
447Readonly, use C<Hash1>.
448
449If %h is already a Readonly variable, the program will die with
450an 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
460The C<Readonly> function is an alternate to the C<Scalar>, C<Array>,
461and C<Hash> functions. It has the advantage (if you consider it an
462advantage) of being one function. That may make your program look
463neater, if you're initializing a whole bunch of constants at once.
464You may or may not prefer this uniform style.
465
466It has the disadvantage of having a slightly different syntax for
467versions of Perl prior to 5.8. For earlier versions, you must supply
468a 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
475You 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
485These alternate functions create shallow Readonly variables, instead
486of 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
500These are a few very simple examples:
501
502=head2 Scalars
503
504A plain old read-only value
505
506 Readonly::Scalar $a => "A string value";
507
508The value need not be a compile-time constant:
509
510 Readonly::Scalar $a => $computed_value;
511
512=head2 Arrays/Lists
513
514A read-only array:
515
516 Readonly::Array @a => (1, 2, 3, 4);
517
518The parentheses are optional:
519
520 Readonly::Array @a => 1, 2, 3, 4;
521
522You can use Perl's built-in array quoting syntax:
523
524 Readonly::Array @a => qw/1 2 3 4/;
525
526You can initialize a read-only array from a variable one:
527
528 Readonly::Array @a => @computed_values;
529
530A read-only array can be empty, too:
531
532 Readonly::Array @a => ();
533 Readonly::Array @a; # equivalent
534
535=head2 Hashes
536
537Typical usage:
538
539 Readonly::Hash %a => (key1 => 'value1', key2 => 'value2');
540
541A read-only hash can be initialized from a variable one:
542
543 Readonly::Hash %a => %computed_values;
544
545A read-only hash can be empty:
546
547 Readonly::Hash %a => ();
548 Readonly::Hash %a; # equivalent
549
550If 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
557Historically, this module exports the C<Readonly> symbol into the calling
558program's namespace by default. The following symbols are also available for
559import into your program, if you like: C<Scalar>, C<Scalar1>, C<Array>,
560C<Array1>, C<Hash>, and C<Hash1>.
561
562=head1 Requirements
563
564L<Readonly::XS> is recommended but not required. There are no non-core
565requirements.
566
567=head1 Bug Reports
568
569If email is better for you, L<my address is mentioned below|/"Author"> but I
570would rather have bugs sent through the issue tracker found at
571http://github.com/sanko/readonly/issues.
572
573Please check the TODO file included with this distribution in case your bug
574is already known (...I probably won't file bug reports to myself).
575
576=head1 Acknowladgements
577
578Thanks to Slaven Rezic for the idea of one common function (Readonly) for all
579three types of variables (13 April 2002).
580
581Thanks to Ernest Lergon for the idea (and initial code) for deeply-Readonly
582data structures (21 May 2002).
583
584Thanks to Damian Conway for the idea (and code) for making the Readonly
585function work a lot smoother under perl 5.8+.
586
587=head1 Author
588
589Sanko Robinson <sanko@cpan.org> - http://sankorobinson.com/
590
591CPAN ID: SANKO
592
593Original author: Eric J. Roode, roode@cpan.org
594
595=head1 License and Legal
596
597Copyright (C) 2013 by Sanko Robinson <sanko@cpan.org>
598
599Copyright (c) 2001-2004 by Eric J. Roode. All Rights Reserved.
600
601This module is free software; you can redistribute it and/or modify it under
602the 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
sub Readonly::CORE:subst; # opcode