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