| Filename | /home/micha/.plenv/versions/5.38.2/lib/perl5/5.38.2/strict.pm |
| Statements | Executed 0 statements in 0s |
| Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
|---|---|---|---|---|---|
| 136 | 136 | 128 | 234µs | 234µs | strict::import |
| 56 | 56 | 29 | 229µs | 229µs | strict::unimport |
| 0 | 0 | 0 | 0s | 0s | strict::BEGIN |
| 0 | 0 | 0 | 0s | 0s | strict::__ANON__[:31] |
| 0 | 0 | 0 | 0s | 0s | strict::__ANON__[:37] |
| 0 | 0 | 0 | 0s | 0s | strict::bits |
| Line | State ments |
Time on line |
Calls | Time in subs |
Code |
|---|---|---|---|---|---|
| 1 | package strict; | ||||
| 2 | |||||
| 3 | $strict::VERSION = "1.12"; | ||||
| 4 | |||||
| 5 | my ( %bitmask, %explicit_bitmask ); | ||||
| 6 | |||||
| 7 | BEGIN { | ||||
| 8 | # Verify that we're called correctly so that strictures will work. | ||||
| 9 | # Can't use Carp, since Carp uses us! | ||||
| 10 | # see also warnings.pm. | ||||
| 11 | die sprintf "Incorrect use of pragma '%s' at %s line %d.\n", __PACKAGE__, +(caller)[1,2] | ||||
| 12 | if __FILE__ !~ ( '(?x) \b '.__PACKAGE__.' \.pmc? \z' ) | ||||
| 13 | && __FILE__ =~ ( '(?x) \b (?i:'.__PACKAGE__.') \.pmc? \z' ); | ||||
| 14 | |||||
| 15 | %bitmask = ( | ||||
| 16 | refs => 0x00000002, | ||||
| 17 | subs => 0x00000200, | ||||
| 18 | vars => 0x00000400, | ||||
| 19 | ); | ||||
| 20 | |||||
| 21 | %explicit_bitmask = ( | ||||
| 22 | refs => 0x00000020, | ||||
| 23 | subs => 0x00000040, | ||||
| 24 | vars => 0x00000080, | ||||
| 25 | ); | ||||
| 26 | |||||
| 27 | my $bits = 0; | ||||
| 28 | $bits |= $_ for values %bitmask; | ||||
| 29 | |||||
| 30 | my $inline_all_bits = $bits; | ||||
| 31 | *all_bits = sub () { $inline_all_bits }; | ||||
| 32 | |||||
| 33 | $bits = 0; | ||||
| 34 | $bits |= $_ for values %explicit_bitmask; | ||||
| 35 | |||||
| 36 | my $inline_all_explicit_bits = $bits; | ||||
| 37 | *all_explicit_bits = sub () { $inline_all_explicit_bits }; | ||||
| 38 | } | ||||
| 39 | |||||
| 40 | sub bits { | ||||
| 41 | my $bits = 0; | ||||
| 42 | my @wrong; | ||||
| 43 | foreach my $s (@_) { | ||||
| 44 | if (exists $bitmask{$s}) { | ||||
| 45 | $^H |= $explicit_bitmask{$s}; | ||||
| 46 | |||||
| 47 | $bits |= $bitmask{$s}; | ||||
| 48 | } | ||||
| 49 | else { | ||||
| 50 | push @wrong, $s; | ||||
| 51 | } | ||||
| 52 | } | ||||
| 53 | if (@wrong) { | ||||
| 54 | require Carp; | ||||
| 55 | Carp::croak("Unknown 'strict' tag(s) '@wrong'"); | ||||
| 56 | } | ||||
| 57 | $bits; | ||||
| 58 | } | ||||
| 59 | |||||
| 60 | # spent 234µs within strict::import which was called 136 times, avg 2µs/call:
# once (18µs+0s) by main::BEGIN@3 at line 3 of /home/micha/Projekt/spreadsheet-parsexlsx/t/bug-md-11.t
# once (4µs+0s) by vars::BEGIN@8 at line 8 of vars.pm
# once (4µs+0s) by base::BEGIN@4 at line 4 of base.pm
# once (3µs+0s) by Symbol::BEGIN@167 at line 167 of Symbol.pm
# once (2µs+0s) by Test2::EventFacet::Parent::BEGIN@2 at line 2 of Test2/EventFacet/Parent.pm
# once (2µs+0s) by Test2::EventFacet::Plan::BEGIN@2 at line 2 of Test2/EventFacet/Plan.pm
# once (2µs+0s) by Spreadsheet::ParseXLSX::Decryptor::BEGIN@3 at line 3 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Decryptor.pm
# once (2µs+0s) by Test2::API::BEGIN@2 at line 2 of Test2/API.pm
# once (2µs+0s) by List::Util::BEGIN@9 at line 9 of List/Util.pm
# once (2µs+0s) by Test2::Util::BEGIN@2 at line 2 of Test2/Util.pm
# once (2µs+0s) by Test2::Event::Pass::BEGIN@2 at line 2 of Test2/Event/Pass.pm
# once (2µs+0s) by Test::Builder::Formatter::BEGIN@2 at line 2 of Test/Builder/Formatter.pm
# once (2µs+0s) by Test::More::BEGIN@4 at line 4 of Test/More.pm
# once (2µs+0s) by Test2::API::Context::BEGIN@2 at line 2 of Test2/API/Context.pm
# once (2µs+0s) by Test2::API::Instance::BEGIN@2 at line 2 of Test2/API/Instance.pm
# once (2µs+0s) by Test2::Event::Bail::BEGIN@2 at line 2 of Test2/Event/Bail.pm
# once (2µs+0s) by Carp::BEGIN@4 at line 4 of Carp.pm
# once (2µs+0s) by Config::BEGIN@9 at line 9 of Config.pm
# once (2µs+0s) by Config::BEGIN@5 at line 5 of Config_heavy.pl
# once (2µs+0s) by Test2::Formatter::BEGIN@2 at line 2 of Test2/Formatter.pm
# once (2µs+0s) by Test2::Event::Note::BEGIN@2 at line 2 of Test2/Event/Note.pm
# once (2µs+0s) by Exporter::BEGIN@3 at line 3 of Exporter.pm
# once (2µs+0s) by Test2::API::Stack::BEGIN@2 at line 2 of Test2/API/Stack.pm
# once (2µs+0s) by Test2::Event::BEGIN@2 at line 2 of Test2/Event.pm
# once (2µs+0s) by Test2::Event::Subtest::BEGIN@2 at line 2 of Test2/Event/Subtest.pm
# once (2µs+0s) by Test2::Event::Diag::BEGIN@2 at line 2 of Test2/Event/Diag.pm
# once (2µs+0s) by Test2::Event::Plan::BEGIN@2 at line 2 of Test2/Event/Plan.pm
# once (2µs+0s) by Archive::Zip::Archive::BEGIN@5 at line 5 of Archive/Zip/Archive.pm
# once (2µs+0s) by Test2::Event::V2::BEGIN@2 at line 2 of Test2/Event/V2.pm
# once (2µs+0s) by Test2::EventFacet::Hub::BEGIN@2 at line 2 of Test2/EventFacet/Hub.pm
# once (2µs+0s) by Test2::Event::Waiting::BEGIN@2 at line 2 of Test2/Event/Waiting.pm
# once (2µs+0s) by File::Temp::BEGIN@145 at line 145 of File/Temp.pm
# once (2µs+0s) by Test2::Event::Ok::BEGIN@2 at line 2 of Test2/Event/Ok.pm
# once (2µs+0s) by Test2::EventFacet::Info::BEGIN@2 at line 2 of Test2/EventFacet/Info.pm
# once (2µs+0s) by Test2::Event::Exception::BEGIN@2 at line 2 of Test2/Event/Exception.pm
# once (2µs+0s) by Test2::Event::Fail::BEGIN@2 at line 2 of Test2/Event/Fail.pm
# once (2µs+0s) by Test::Builder::TodoDiag::BEGIN@2 at line 2 of Test/Builder/TodoDiag.pm
# once (2µs+0s) by Test2::EventFacet::Trace::BEGIN@2 at line 2 of Test2/EventFacet/Trace.pm
# once (2µs+0s) by OLE::Storage_Lite::PPS::Root::BEGIN@168 at line 168 of OLE/Storage_Lite.pm
# once (2µs+0s) by Spreadsheet::ParseXLSX::BEGIN@3 at line 3 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX.pm
# once (2µs+0s) by Test2::Util::ExternalMeta::BEGIN@2 at line 2 of Test2/Util/ExternalMeta.pm
# once (2µs+0s) by Digest::Perl::MD5::BEGIN@2 at line 2 of Digest/Perl/MD5.pm
# once (2µs+0s) by Spreadsheet::ParseExcel::Workbook::BEGIN@19 at line 19 of Spreadsheet/ParseExcel/Workbook.pm
# once (2µs+0s) by Archive::Zip::DirectoryMember::BEGIN@3 at line 3 of Archive/Zip/DirectoryMember.pm
# once (2µs+0s) by POSIX::BEGIN@2 at line 2 of POSIX.pm
# once (2µs+0s) by Spreadsheet::ParseExcel::Font::BEGIN@19 at line 19 of Spreadsheet/ParseExcel/Font.pm
# once (2µs+0s) by Time::HiRes::BEGIN@4 at line 4 of Time/HiRes.pm
# once (2µs+0s) by File::Spec::BEGIN@3 at line 3 of File/Spec.pm
# once (2µs+0s) by Test2::EventFacet::Amnesty::BEGIN@2 at line 2 of Test2/EventFacet/Amnesty.pm
# once (2µs+0s) by Test2::EventFacet::Control::BEGIN@2 at line 2 of Test2/EventFacet/Control.pm
# once (2µs+0s) by Spreadsheet::ParseExcel::BEGIN@17 at line 17 of Spreadsheet/ParseExcel.pm
# once (2µs+0s) by Test::Builder::Module::BEGIN@3 at line 3 of Test/Builder/Module.pm
# once (2µs+0s) by Crypt::Mode::ECB::BEGIN@5 at line 5 of Crypt/Mode/ECB.pm
# once (2µs+0s) by Encode::MIME::Name::BEGIN@2 at line 2 of Encode/MIME/Name.pm
# once (2µs+0s) by Archive::Zip::Member::BEGIN@5 at line 5 of Archive/Zip/Member.pm
# once (2µs+0s) by Time::Local::BEGIN@3 at line 3 of Time/Local.pm
# once (2µs+0s) by Archive::Zip::StringMember::BEGIN@3 at line 3 of Archive/Zip/StringMember.pm
# once (2µs+0s) by Archive::Zip::ZipFileMember::BEGIN@3 at line 3 of Archive/Zip/ZipFileMember.pm
# once (2µs+0s) by Test2::Event::Skip::BEGIN@2 at line 2 of Test2/Event/Skip.pm
# once (2µs+0s) by Test2::EventFacet::About::BEGIN@2 at line 2 of Test2/EventFacet/About.pm
# once (2µs+0s) by Archive::Zip::FileMember::BEGIN@3 at line 3 of Archive/Zip/FileMember.pm
# once (2µs+0s) by Encode::BEGIN@5 at line 5 of Encode.pm
# once (2µs+0s) by Test2::EventFacet::Error::BEGIN@2 at line 2 of Test2/EventFacet/Error.pm
# once (2µs+0s) by parent::BEGIN@2 at line 2 of parent.pm
# once (2µs+0s) by Exporter::Heavy::BEGIN@3 at line 3 of Exporter/Heavy.pm
# once (2µs+0s) by File::Glob::BEGIN@3 at line 3 of File/Glob.pm
# once (2µs+0s) by Encode::Encoding::BEGIN@4 at line 4 of Encode/Encoding.pm
# once (2µs+0s) by Scalar::Util::BEGIN@9 at line 9 of Scalar/Util.pm
# once (2µs+0s) by Archive::Zip::NewFileMember::BEGIN@3 at line 3 of Archive/Zip/NewFileMember.pm
# once (2µs+0s) by Encode::Config::BEGIN@7 at line 7 of Encode/Config.pm
# once (2µs+0s) by XML::Parser::BEGIN@11 at line 11 of XML/Parser.pm
# once (2µs+0s) by Test2::Hub::Interceptor::BEGIN@2 at line 2 of Test2/Hub/Interceptor.pm
# once (2µs+0s) by Test2::EventFacet::Assert::BEGIN@2 at line 2 of Test2/EventFacet/Assert.pm
# once (2µs+0s) by Spreadsheet::ParseXLSX::Decryptor::Agile::BEGIN@3 at line 3 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Decryptor/Agile.pm
# once (2µs+0s) by Spreadsheet::ParseXLSX::Cell::BEGIN@3 at line 3 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Cell.pm
# once (2µs+0s) by File::Copy::BEGIN@11 at line 11 of File/Copy.pm
# once (2µs+0s) by Encode::Alias::BEGIN@2 at line 2 of Encode/Alias.pm
# once (2µs+0s) by IO::File::BEGIN@120 at line 120 of IO/File.pm
# once (2µs+0s) by Compress::Raw::Zlib::BEGIN@8 at line 8 of Compress/Raw/Zlib.pm
# once (2µs+0s) by Test2::Hub::BEGIN@2 at line 2 of Test2/Hub.pm
# once (2µs+0s) by Spreadsheet::ParseXLSX::BEGIN@1 at line 1 of XML/Twig.pm
# once (2µs+0s) by File::Find::BEGIN@3 at line 3 of File/Find.pm
# once (2µs+0s) by FileHandle::BEGIN@4 at line 4 of FileHandle.pm
# once (2µs+0s) by Test::Builder::BEGIN@4 at line 4 of Test/Builder.pm
# once (2µs+0s) by Digest::base::BEGIN@3 at line 3 of Digest/base.pm
# once (2µs+0s) by Test2::Util::HashBase::BEGIN@2 at line 2 of Test2/Util/HashBase.pm
# once (2µs+0s) by overload::BEGIN@3 at line 3 of overload.pm
# once (2µs+0s) by MIME::Base64::BEGIN@3 at line 3 of MIME/Base64.pm
# once (2µs+0s) by Spreadsheet::ParseExcel::Worksheet::BEGIN@19 at line 19 of Spreadsheet/ParseExcel/Worksheet.pm
# once (2µs+0s) by File::Temp::Dir::BEGIN@2602 at line 2602 of File/Temp.pm
# once (2µs+0s) by Test2::EventFacet::Meta::BEGIN@2 at line 2 of Test2/EventFacet/Meta.pm
# once (2µs+0s) by URI::BEGIN@3 at line 3 of URI.pm
# once (2µs+0s) by Fcntl::BEGIN@58 at line 58 of Fcntl.pm
# once (2µs+0s) by mro::BEGIN@10 at line 10 of mro.pm
# once (2µs+0s) by JSON::PP::BEGIN@6 at line 6 of JSON/PP.pm
# once (2µs+0s) by Test2::Util::Facets2Legacy::BEGIN@2 at line 2 of Test2/Util/Facets2Legacy.pm
# once (2µs+0s) by Test2::EventFacet::BEGIN@2 at line 2 of Test2/EventFacet.pm
# once (2µs+0s) by Test2::Hub::Subtest::BEGIN@2 at line 2 of Test2/Hub/Subtest.pm
# once (2µs+0s) by OLE::Storage_Lite::PPS::File::BEGIN@713 at line 713 of OLE/Storage_Lite.pm
# once (1µs+0s) by Digest::SHA::BEGIN@5 at line 5 of Digest/SHA.pm
# once (1µs+0s) by URI::Escape::BEGIN@3 at line 3 of URI/Escape.pm
# once (1µs+0s) by Archive::Zip::BEGIN@4 at line 4 of Archive/Zip.pm
# once (1µs+0s) by Test2::Formatter::TAP::BEGIN@2 at line 2 of Test2/Formatter/TAP.pm
# once (1µs+0s) by Crypt::RC4::BEGIN@15 at line 15 of Crypt/RC4.pm
# once (1µs+0s) by File::Find::BEGIN@13 at line 13 of File/Find.pm
# once (1µs+0s) by constant::BEGIN@3 at line 3 of constant.pm
# once (1µs+0s) by Graphics::ColorUtils::BEGIN@5 at line 5 of Graphics/ColorUtils.pm
# once (1µs+0s) by Spreadsheet::ParseXLSX::Decryptor::Standard::BEGIN@3 at line 3 of /home/micha/Projekt/spreadsheet-parsexlsx/lib/Spreadsheet/ParseXLSX/Decryptor/Standard.pm
# once (1µs+0s) by bytes::BEGIN@3 at line 3 of bytes.pm
# once (1µs+0s) by File::Basename::BEGIN@50 at line 50 of File/Basename.pm
# once (1µs+0s) by File::Path::BEGIN@4 at line 4 of File/Path.pm
# once (1µs+0s) by Spreadsheet::ParseExcel::FmtDefault::BEGIN@19 at line 19 of Spreadsheet/ParseExcel/FmtDefault.pm
# once (1µs+0s) by IO::Seekable::BEGIN@99 at line 99 of IO/Seekable.pm
# once (1µs+0s) by utf8::BEGIN@3 at line 3 of utf8.pm
# once (1µs+0s) by Test2::Hub::Interceptor::Terminator::BEGIN@2 at line 2 of Test2/Hub/Interceptor/Terminator.pm
# once (1µs+0s) by IO::Handle::BEGIN@272 at line 272 of IO/Handle.pm
# once (1µs+0s) by OLE::Storage_Lite::PPS::Dir::BEGIN@801 at line 801 of OLE/Storage_Lite.pm
# once (1µs+0s) by Errno::BEGIN@9 at line 9 of Errno.pm
# once (1µs+0s) by builtin::BEGIN@3 at line 3 of builtin.pm
# once (1µs+0s) by XML::Parser::Expat::BEGIN@3 at line 3 of XML/Parser/Expat.pm
# once (1µs+0s) by Spreadsheet::ParseExcel::Format::BEGIN@19 at line 19 of Spreadsheet/ParseExcel/Format.pm
# once (1µs+0s) by Cwd::BEGIN@2 at line 2 of Cwd.pm
# once (1µs+0s) by Test2::Util::Trace::BEGIN@5 at line 5 of Test2/Util/Trace.pm
# once (1µs+0s) by IO::BEGIN@7 at line 7 of IO.pm
# once (1µs+0s) by Symbol::BEGIN@3 at line 3 of Symbol.pm
# once (1µs+0s) by JSON::PP::Boolean::BEGIN@3 at line 3 of JSON/PP/Boolean.pm
# once (1µs+0s) by JSON::BEGIN@4 at line 4 of JSON.pm
# once (1µs+0s) by JSON::PP::IncrParser::BEGIN@1485 at line 1485 of JSON/PP.pm
# once (1µs+0s) by File::Spec::Unix::BEGIN@3 at line 3 of File/Spec/Unix.pm
# once (1µs+0s) by OLE::Storage_Lite::PPS::BEGIN@12 at line 12 of OLE/Storage_Lite.pm
# once (1µs+0s) by Spreadsheet::ParseExcel::Cell::BEGIN@19 at line 19 of Spreadsheet/ParseExcel/Cell.pm
# once (1µs+0s) by CryptX::BEGIN@3 at line 3 of CryptX.pm
# once (1µs+0s) by Crypt::Mode::CBC::BEGIN@5 at line 5 of Crypt/Mode/CBC.pm
# once (1µs+0s) by Spreadsheet::ParseExcel::Utility::BEGIN@19 at line 19 of Spreadsheet/ParseExcel/Utility.pm
# once (1µs+0s) by OLE::Storage_Lite::BEGIN@828 at line 828 of OLE/Storage_Lite.pm
# once (1µs+0s) by Crypt::Cipher::BEGIN@3 at line 3 of Crypt/Cipher.pm | ||||
| 61 | shift; | ||||
| 62 | $^H |= @_ ? &bits : all_bits | all_explicit_bits; | ||||
| 63 | } | ||||
| 64 | |||||
| 65 | # spent 229µs within strict::unimport which was called 56 times, avg 4µs/call:
# once (15µs+0s) by Test::Builder::BEGIN@120 at line 120 of Test/Builder.pm
# once (6µs+0s) by XML::Parser::Expat::BEGIN@460 at line 460 of XML/Parser/Expat.pm
# once (6µs+0s) by Symbol::BEGIN@103 at line 103 of Symbol.pm
# once (5µs+0s) by Carp::BEGIN@730 at line 730 of Carp.pm
# once (5µs+0s) by Test2::API::Instance::BEGIN@62 at line 62 of Test2/API/Instance.pm
# once (5µs+0s) by Time::HiRes::BEGIN@70 at line 70 of Time/HiRes.pm
# once (5µs+0s) by Carp::BEGIN@256 at line 256 of Carp.pm
# once (5µs+0s) by Carp::BEGIN@188 at line 188 of Carp.pm
# once (4µs+0s) by Test2::Util::HashBase::BEGIN@94 at line 94 of Test2/Util/HashBase.pm
# once (4µs+0s) by Cwd::BEGIN@644 at line 644 of Cwd.pm
# once (4µs+0s) by XML::Twig::BEGIN@1327 at line 1327 of XML/Twig.pm
# once (4µs+0s) by List::Util::BEGIN@35 at line 35 of List/Util.pm
# once (4µs+0s) by IO::Handle::BEGIN@617 at line 617 of IO/Handle.pm
# once (4µs+0s) by Test::More::BEGIN@209 at line 209 of Test/More.pm
# once (4µs+0s) by Test::Builder::BEGIN@1518 at line 1518 of Test/Builder.pm
# once (4µs+0s) by XML::Twig::BEGIN@3229 at line 3229 of XML/Twig.pm
# once (4µs+0s) by JSON::Backend::PP::BEGIN@342 at line 342 of JSON.pm
# once (4µs+0s) by URI::BEGIN@180 at line 180 of URI.pm
# once (4µs+0s) by Test::Builder::BEGIN@1251 at line 1251 of Test/Builder.pm
# once (4µs+0s) by constant::BEGIN@40 at line 40 of constant.pm
# once (4µs+0s) by XML::Twig::BEGIN@3587 at line 3587 of XML/Twig.pm
# once (4µs+0s) by Exporter::BEGIN@4 at line 4 of Exporter.pm
# once (4µs+0s) by File::Path::BEGIN@29 at line 29 of File/Path.pm
# once (4µs+0s) by Test2::EventFacet::Meta::BEGIN@30 at line 30 of Test2/EventFacet/Meta.pm
# once (4µs+0s) by Symbol::BEGIN@137 at line 137 of Symbol.pm
# once (4µs+0s) by Config::BEGIN@47 at line 47 of Config.pm
# once (4µs+0s) by parent::BEGIN@21 at line 21 of parent.pm
# once (4µs+0s) by File::Spec::Unix::BEGIN@167 at line 167 of File/Spec/Unix.pm
# once (4µs+0s) by Compress::Raw::Zlib::BEGIN@121 at line 121 of Compress/Raw/Zlib.pm
# once (4µs+0s) by Test2::Util::HashBase::BEGIN@37 at line 37 of Test2/Util/HashBase.pm
# once (4µs+0s) by File::Temp::BEGIN@240 at line 240 of File/Temp.pm
# once (4µs+0s) by Exporter::Heavy::BEGIN@4 at line 4 of Exporter/Heavy.pm
# once (4µs+0s) by XML::Twig::BEGIN@4159 at line 4159 of XML/Twig.pm
# once (4µs+0s) by XML::Twig::BEGIN@3852 at line 3852 of XML/Twig.pm
# once (4µs+0s) by Symbol::BEGIN@156 at line 156 of Symbol.pm
# once (4µs+0s) by Test::Builder::BEGIN@61 at line 61 of Test/Builder.pm
# once (4µs+0s) by Test::Builder::BEGIN@1539 at line 1539 of Test/Builder.pm
# once (4µs+0s) by Test::Builder::BEGIN@102 at line 102 of Test/Builder.pm
# once (4µs+0s) by FileHandle::BEGIN@46 at line 46 of FileHandle.pm
# once (4µs+0s) by Carp::BEGIN@751 at line 751 of Carp.pm
# once (4µs+0s) by Test::Builder::BEGIN@116 at line 116 of Test/Builder.pm
# once (4µs+0s) by XML::Twig::BEGIN@3619 at line 3619 of XML/Twig.pm
# once (3µs+0s) by constant::BEGIN@65 at line 65 of constant.pm
# once (3µs+0s) by XML::Twig::BEGIN@3648 at line 3648 of XML/Twig.pm
# once (3µs+0s) by Test::Builder::BEGIN@1556 at line 1556 of Test/Builder.pm
# once (3µs+0s) by constant::BEGIN@141 at line 141 of constant.pm
# once (3µs+0s) by overload::BEGIN@4 at line 4 of overload.pm
# once (3µs+0s) by File::Temp::BEGIN@270 at line 270 of File/Temp.pm
# once (3µs+0s) by constant::BEGIN@90 at line 90 of constant.pm
# once (3µs+0s) by XML::Twig::BEGIN@4246 at line 4246 of XML/Twig.pm
# once (3µs+0s) by XML::Twig::BEGIN@4175 at line 4175 of XML/Twig.pm
# once (3µs+0s) by XML::Twig::BEGIN@4211 at line 4211 of XML/Twig.pm
# once (3µs+0s) by Spreadsheet::ParseExcel::BEGIN@2628 at line 2628 of Spreadsheet/ParseExcel.pm
# once (3µs+0s) by POSIX::BEGIN@225 at line 225 of POSIX.pm
# once (2µs+0s) by XML::Twig::BEGIN@4181 at line 4181 of XML/Twig.pm
# once (2µs+0s) by File::Glob::BEGIN@54 at line 54 of File/Glob.pm | ||||
| 66 | shift; | ||||
| 67 | |||||
| 68 | if (@_) { | ||||
| 69 | $^H &= ~&bits; | ||||
| 70 | } | ||||
| 71 | else { | ||||
| 72 | $^H &= ~all_bits; | ||||
| 73 | $^H |= all_explicit_bits; | ||||
| 74 | } | ||||
| 75 | } | ||||
| 76 | |||||
| 77 | 1; | ||||
| 78 | __END__ | ||||
| 79 | |||||
| 80 | =head1 NAME | ||||
| 81 | |||||
| 82 | strict - Perl pragma to restrict unsafe constructs | ||||
| 83 | |||||
| 84 | =head1 SYNOPSIS | ||||
| 85 | |||||
| 86 | use strict; | ||||
| 87 | |||||
| 88 | use strict "vars"; | ||||
| 89 | use strict "refs"; | ||||
| 90 | use strict "subs"; | ||||
| 91 | |||||
| 92 | use strict; | ||||
| 93 | no strict "vars"; | ||||
| 94 | |||||
| 95 | =head1 DESCRIPTION | ||||
| 96 | |||||
| 97 | The C<strict> pragma disables certain Perl expressions that could behave | ||||
| 98 | unexpectedly or are difficult to debug, turning them into errors. The | ||||
| 99 | effect of this pragma is limited to the current file or scope block. | ||||
| 100 | |||||
| 101 | If no import list is supplied, all possible restrictions are assumed. | ||||
| 102 | (This is the safest mode to operate in, but is sometimes too strict for | ||||
| 103 | casual programming.) Currently, there are three possible things to be | ||||
| 104 | strict about: "subs", "vars", and "refs". | ||||
| 105 | |||||
| 106 | =over 6 | ||||
| 107 | |||||
| 108 | =item C<strict refs> | ||||
| 109 | |||||
| 110 | This generates a runtime error if you | ||||
| 111 | use symbolic references (see L<perlref>). | ||||
| 112 | |||||
| 113 | use strict 'refs'; | ||||
| 114 | $ref = \$foo; | ||||
| 115 | print $$ref; # ok | ||||
| 116 | $ref = "foo"; | ||||
| 117 | print $$ref; # runtime error; normally ok | ||||
| 118 | $file = "STDOUT"; | ||||
| 119 | print $file "Hi!"; # error; note: no comma after $file | ||||
| 120 | |||||
| 121 | There is one exception to this rule: | ||||
| 122 | |||||
| 123 | $bar = \&{'foo'}; | ||||
| 124 | &$bar; | ||||
| 125 | |||||
| 126 | is allowed so that C<goto &$AUTOLOAD> would not break under stricture. | ||||
| 127 | |||||
| 128 | |||||
| 129 | =item C<strict vars> | ||||
| 130 | |||||
| 131 | This generates a compile-time error if you access a variable that was | ||||
| 132 | neither explicitly declared (using any of C<my>, C<our>, C<state>, or C<use | ||||
| 133 | vars>) nor fully qualified. (Because this is to avoid variable suicide | ||||
| 134 | problems and subtle dynamic scoping issues, a merely C<local> variable isn't | ||||
| 135 | good enough.) See L<perlfunc/my>, L<perlfunc/our>, L<perlfunc/state>, | ||||
| 136 | L<perlfunc/local>, and L<vars>. | ||||
| 137 | |||||
| 138 | use strict 'vars'; | ||||
| 139 | $X::foo = 1; # ok, fully qualified | ||||
| 140 | my $foo = 10; # ok, my() var | ||||
| 141 | local $baz = 9; # blows up, $baz not declared before | ||||
| 142 | |||||
| 143 | package Cinna; | ||||
| 144 | our $bar; # Declares $bar in current package | ||||
| 145 | $bar = 'HgS'; # ok, global declared via pragma | ||||
| 146 | |||||
| 147 | The local() generated a compile-time error because you just touched a global | ||||
| 148 | name without fully qualifying it. | ||||
| 149 | |||||
| 150 | Because of their special use by sort(), the variables $a and $b are | ||||
| 151 | exempted from this check. | ||||
| 152 | |||||
| 153 | =item C<strict subs> | ||||
| 154 | |||||
| 155 | This disables the poetry optimization, generating a compile-time error if | ||||
| 156 | you try to use a bareword identifier that's not a subroutine, unless it | ||||
| 157 | is a simple identifier (no colons) and that it appears in curly braces, | ||||
| 158 | on the left hand side of the C<< => >> symbol, or has the unary minus | ||||
| 159 | operator applied to it. | ||||
| 160 | |||||
| 161 | use strict 'subs'; | ||||
| 162 | $SIG{PIPE} = Plumber; # blows up | ||||
| 163 | $SIG{PIPE} = "Plumber"; # fine: quoted string is always ok | ||||
| 164 | $SIG{PIPE} = \&Plumber; # preferred form | ||||
| 165 | |||||
| 166 | =back | ||||
| 167 | |||||
| 168 | See L<perlmodlib/Pragmatic Modules>. | ||||
| 169 | |||||
| 170 | =head1 HISTORY | ||||
| 171 | |||||
| 172 | C<strict 'subs'>, with Perl 5.6.1, erroneously permitted to use an unquoted | ||||
| 173 | compound identifier (e.g. C<Foo::Bar>) as a hash key (before C<< => >> or | ||||
| 174 | inside curlies), but without forcing it always to a literal string. | ||||
| 175 | |||||
| 176 | Starting with Perl 5.8.1 strict is strict about its restrictions: | ||||
| 177 | if unknown restrictions are used, the strict pragma will abort with | ||||
| 178 | |||||
| 179 | Unknown 'strict' tag(s) '...' | ||||
| 180 | |||||
| 181 | As of version 1.04 (Perl 5.10), strict verifies that it is used as | ||||
| 182 | "strict" to avoid the dreaded Strict trap on case insensitive file | ||||
| 183 | systems. | ||||
| 184 | |||||
| 185 | =cut |