diff --git a/author/cpm/cpanfile.snapshot b/author/cpm/cpanfile.snapshot index c581b36cb..cd037578f 100644 --- a/author/cpm/cpanfile.snapshot +++ b/author/cpm/cpanfile.snapshot @@ -829,100 +829,101 @@ DISTRIBUTIONS Scalar::Util 0 YAML::PP 0.027 perl 5.008001 - PPI-1.279 - pathname: M/MI/MITHALDU/PPI-1.279.tar.gz - provides: - PPI 1.279 - PPI::Cache 1.279 - PPI::Document 1.279 - PPI::Document::File 1.279 - PPI::Document::Fragment 1.279 - PPI::Document::Normalized 1.279 - PPI::Dumper 1.279 - PPI::Element 1.279 - PPI::Exception 1.279 - PPI::Exception::ParserRejection 1.279 - PPI::Find 1.279 - PPI::Lexer 1.279 - PPI::Node 1.279 - PPI::Normal 1.279 - PPI::Normal::Standard 1.279 - PPI::Singletons 1.279 - PPI::Statement 1.279 - PPI::Statement::Break 1.279 - PPI::Statement::Compound 1.279 - PPI::Statement::Data 1.279 - PPI::Statement::End 1.279 - PPI::Statement::Expression 1.279 - PPI::Statement::Given 1.279 - PPI::Statement::Include 1.279 - PPI::Statement::Include::Perl6 1.279 - PPI::Statement::Null 1.279 - PPI::Statement::Package 1.279 - PPI::Statement::Scheduled 1.279 - PPI::Statement::Sub 1.279 - PPI::Statement::Unknown 1.279 - PPI::Statement::UnmatchedBrace 1.279 - PPI::Statement::Variable 1.279 - PPI::Statement::When 1.279 - PPI::Structure 1.279 - PPI::Structure::Block 1.279 - PPI::Structure::Condition 1.279 - PPI::Structure::Constructor 1.279 - PPI::Structure::For 1.279 - PPI::Structure::Given 1.279 - PPI::Structure::List 1.279 - PPI::Structure::Subscript 1.279 - PPI::Structure::Unknown 1.279 - PPI::Structure::When 1.279 - PPI::Token 1.279 - PPI::Token::ArrayIndex 1.279 - PPI::Token::Attribute 1.279 - PPI::Token::BOM 1.279 - PPI::Token::Cast 1.279 - PPI::Token::Comment 1.279 - PPI::Token::DashedWord 1.279 - PPI::Token::Data 1.279 - PPI::Token::End 1.279 - PPI::Token::HereDoc 1.279 - PPI::Token::Label 1.279 - PPI::Token::Magic 1.279 - PPI::Token::Number 1.279 - PPI::Token::Number::Binary 1.279 - PPI::Token::Number::Exp 1.279 - PPI::Token::Number::Float 1.279 - PPI::Token::Number::Hex 1.279 - PPI::Token::Number::Octal 1.279 - PPI::Token::Number::Version 1.279 - PPI::Token::Operator 1.279 - PPI::Token::Pod 1.279 - PPI::Token::Prototype 1.279 - PPI::Token::Quote 1.279 - PPI::Token::Quote::Double 1.279 - PPI::Token::Quote::Interpolate 1.279 - PPI::Token::Quote::Literal 1.279 - PPI::Token::Quote::Single 1.279 - PPI::Token::QuoteLike 1.279 - PPI::Token::QuoteLike::Backtick 1.279 - PPI::Token::QuoteLike::Command 1.279 - PPI::Token::QuoteLike::Readline 1.279 - PPI::Token::QuoteLike::Regexp 1.279 - PPI::Token::QuoteLike::Words 1.279 - PPI::Token::Regexp 1.279 - PPI::Token::Regexp::Match 1.279 - PPI::Token::Regexp::Substitute 1.279 - PPI::Token::Regexp::Transliterate 1.279 - PPI::Token::Separator 1.279 - PPI::Token::Structure 1.279 - PPI::Token::Symbol 1.279 - PPI::Token::Unknown 1.279 - PPI::Token::Whitespace 1.279 - PPI::Token::Word 1.279 - PPI::Tokenizer 1.279 - PPI::Transform 1.279 - PPI::Transform::UpdateCopyright 1.279 - PPI::Util 1.279 - PPI::XSAccessor 1.279 + PPI-1.281 + pathname: M/MI/MITHALDU/PPI-1.281.tar.gz + provides: + PPI 1.281 + PPI::Cache 1.281 + PPI::Document 1.281 + PPI::Document::File 1.281 + PPI::Document::Fragment 1.281 + PPI::Document::Normalized 1.281 + PPI::Dumper 1.281 + PPI::Element 1.281 + PPI::Exception 1.281 + PPI::Exception::ParserRejection 1.281 + PPI::Find 1.281 + PPI::Lexer 1.281 + PPI::Node 1.281 + PPI::Normal 1.281 + PPI::Normal::Standard 1.281 + PPI::Singletons 1.281 + PPI::Statement 1.281 + PPI::Statement::Break 1.281 + PPI::Statement::Compound 1.281 + PPI::Statement::Data 1.281 + PPI::Statement::End 1.281 + PPI::Statement::Expression 1.281 + PPI::Statement::Given 1.281 + PPI::Statement::Include 1.281 + PPI::Statement::Include::Perl6 1.281 + PPI::Statement::Null 1.281 + PPI::Statement::Package 1.281 + PPI::Statement::Scheduled 1.281 + PPI::Statement::Sub 1.281 + PPI::Statement::Unknown 1.281 + PPI::Statement::UnmatchedBrace 1.281 + PPI::Statement::Variable 1.281 + PPI::Statement::When 1.281 + PPI::Structure 1.281 + PPI::Structure::Block 1.281 + PPI::Structure::Condition 1.281 + PPI::Structure::Constructor 1.281 + PPI::Structure::For 1.281 + PPI::Structure::Given 1.281 + PPI::Structure::List 1.281 + PPI::Structure::Signature 1.281 + PPI::Structure::Subscript 1.281 + PPI::Structure::Unknown 1.281 + PPI::Structure::When 1.281 + PPI::Token 1.281 + PPI::Token::ArrayIndex 1.281 + PPI::Token::Attribute 1.281 + PPI::Token::BOM 1.281 + PPI::Token::Cast 1.281 + PPI::Token::Comment 1.281 + PPI::Token::DashedWord 1.281 + PPI::Token::Data 1.281 + PPI::Token::End 1.281 + PPI::Token::HereDoc 1.281 + PPI::Token::Label 1.281 + PPI::Token::Magic 1.281 + PPI::Token::Number 1.281 + PPI::Token::Number::Binary 1.281 + PPI::Token::Number::Exp 1.281 + PPI::Token::Number::Float 1.281 + PPI::Token::Number::Hex 1.281 + PPI::Token::Number::Octal 1.281 + PPI::Token::Number::Version 1.281 + PPI::Token::Operator 1.281 + PPI::Token::Pod 1.281 + PPI::Token::Prototype 1.281 + PPI::Token::Quote 1.281 + PPI::Token::Quote::Double 1.281 + PPI::Token::Quote::Interpolate 1.281 + PPI::Token::Quote::Literal 1.281 + PPI::Token::Quote::Single 1.281 + PPI::Token::QuoteLike 1.281 + PPI::Token::QuoteLike::Backtick 1.281 + PPI::Token::QuoteLike::Command 1.281 + PPI::Token::QuoteLike::Readline 1.281 + PPI::Token::QuoteLike::Regexp 1.281 + PPI::Token::QuoteLike::Words 1.281 + PPI::Token::Regexp 1.281 + PPI::Token::Regexp::Match 1.281 + PPI::Token::Regexp::Substitute 1.281 + PPI::Token::Regexp::Transliterate 1.281 + PPI::Token::Separator 1.281 + PPI::Token::Structure 1.281 + PPI::Token::Symbol 1.281 + PPI::Token::Unknown 1.281 + PPI::Token::Whitespace 1.281 + PPI::Token::Word 1.281 + PPI::Tokenizer 1.281 + PPI::Transform 1.281 + PPI::Transform::UpdateCopyright 1.281 + PPI::Util 1.281 + PPI::XSAccessor 1.281 requirements: Carp 0 Clone 0.30 @@ -933,14 +934,17 @@ DISTRIBUTIONS File::Spec 0.84 List::Util 1.33 Params::Util 1.00 + Safe::Isa 0 Scalar::Util 0 Storable 2.17 Task::Weaken 0 + YAML::PP 0 constant 0 if 0 overload 0 perl 5.006 strict 0 + version 0.77 Parallel-Pipes-0.200 pathname: S/SK/SKAJI/Parallel-Pipes-0.200.tar.gz provides: @@ -1031,6 +1035,15 @@ DISTRIBUTIONS requirements: Module::Build::Tiny 0.034 perl 5.008001 + Safe-Isa-1.000010 + pathname: E/ET/ETHER/Safe-Isa-1.000010.tar.gz + provides: + Safe::Isa 1.000010 + requirements: + Exporter 5.57 + ExtUtils::MakeMaker 0 + Scalar::Util 0 + perl 5.006 Scalar-List-Utils-1.68 pathname: P/PE/PEVANS/Scalar-List-Utils-1.68.tar.gz provides: @@ -1081,16 +1094,16 @@ DISTRIBUTIONS Scalar::Util 1.14 perl 5.006 strict 0 - Term-Table-0.023 - pathname: E/EX/EXODIST/Term-Table-0.023.tar.gz + Term-Table-0.024 + pathname: E/EX/EXODIST/Term-Table-0.024.tar.gz provides: - Term::Table 0.023 - Term::Table::Cell 0.023 - Term::Table::CellStack 0.023 - Term::Table::HashBase 0.023 - Term::Table::LineBreak 0.023 - Term::Table::Spacer 0.023 - Term::Table::Util 0.023 + Term::Table 0.024 + Term::Table::Cell 0.024 + Term::Table::CellStack 0.024 + Term::Table::HashBase 0.024 + Term::Table::LineBreak 0.024 + Term::Table::Spacer 0.024 + Term::Table::Util 0.024 requirements: Carp 0 ExtUtils::MakeMaker 0 @@ -1151,204 +1164,205 @@ DISTRIBUTIONS Test::Harness 3.50 requirements: ExtUtils::MakeMaker 0 - Test-Simple-1.302206 - pathname: E/EX/EXODIST/Test-Simple-1.302206.tar.gz - provides: - Test2 1.302206 - Test2::API 1.302206 - Test2::API::Breakage 1.302206 - Test2::API::Context 1.302206 - Test2::API::Instance 1.302206 - Test2::API::InterceptResult 1.302206 - Test2::API::InterceptResult::Event 1.302206 - Test2::API::InterceptResult::Facet 1.302206 - Test2::API::InterceptResult::Hub 1.302206 - Test2::API::InterceptResult::Squasher 1.302206 - Test2::API::Stack 1.302206 - Test2::AsyncSubtest 1.302206 - Test2::AsyncSubtest::Event::Attach 1.302206 - Test2::AsyncSubtest::Event::Detach 1.302206 - Test2::AsyncSubtest::Formatter 1.302206 - Test2::AsyncSubtest::Hub 1.302206 - Test2::Bundle 1.302206 - Test2::Bundle::Extended 1.302206 - Test2::Bundle::More 1.302206 - Test2::Bundle::Simple 1.302206 - Test2::Compare 1.302206 - Test2::Compare::Array 1.302206 - Test2::Compare::Bag 1.302206 - Test2::Compare::Base 1.302206 - Test2::Compare::Bool 1.302206 - Test2::Compare::Custom 1.302206 - Test2::Compare::DeepRef 1.302206 - Test2::Compare::Delta 1.302206 - Test2::Compare::Event 1.302206 - Test2::Compare::EventMeta 1.302206 - Test2::Compare::Float 1.302206 - Test2::Compare::Hash 1.302206 - Test2::Compare::Isa 1.302206 - Test2::Compare::Meta 1.302206 - Test2::Compare::Negatable 1.302206 - Test2::Compare::Number 1.302206 - Test2::Compare::Object 1.302206 - Test2::Compare::OrderedSubset 1.302206 - Test2::Compare::Pattern 1.302206 - Test2::Compare::Ref 1.302206 - Test2::Compare::Regex 1.302206 - Test2::Compare::Scalar 1.302206 - Test2::Compare::Set 1.302206 - Test2::Compare::String 1.302206 - Test2::Compare::Undef 1.302206 - Test2::Compare::Wildcard 1.302206 - Test2::Event 1.302206 - Test2::Event::Bail 1.302206 - Test2::Event::Diag 1.302206 - Test2::Event::Encoding 1.302206 - Test2::Event::Exception 1.302206 - Test2::Event::Fail 1.302206 - Test2::Event::Generic 1.302206 - Test2::Event::Note 1.302206 - Test2::Event::Ok 1.302206 - Test2::Event::Pass 1.302206 - Test2::Event::Plan 1.302206 - Test2::Event::Skip 1.302206 - Test2::Event::Subtest 1.302206 - Test2::Event::TAP::Version 1.302206 - Test2::Event::V2 1.302206 - Test2::Event::Waiting 1.302206 - Test2::EventFacet 1.302206 - Test2::EventFacet::About 1.302206 - Test2::EventFacet::Amnesty 1.302206 - Test2::EventFacet::Assert 1.302206 - Test2::EventFacet::Control 1.302206 - Test2::EventFacet::Error 1.302206 - Test2::EventFacet::Hub 1.302206 - Test2::EventFacet::Info 1.302206 - Test2::EventFacet::Info::Table 1.302206 - Test2::EventFacet::Meta 1.302206 - Test2::EventFacet::Parent 1.302206 - Test2::EventFacet::Plan 1.302206 - Test2::EventFacet::Render 1.302206 - Test2::EventFacet::Trace 1.302206 - Test2::Formatter 1.302206 - Test2::Formatter::TAP 1.302206 - Test2::Hub 1.302206 - Test2::Hub::Interceptor 1.302206 - Test2::Hub::Interceptor::Terminator 1.302206 - Test2::Hub::Subtest 1.302206 - Test2::IPC 1.302206 - Test2::IPC::Driver 1.302206 - Test2::IPC::Driver::Files 1.302206 - Test2::Manual 1.302206 - Test2::Manual::Anatomy 1.302206 - Test2::Manual::Anatomy::API 1.302206 - Test2::Manual::Anatomy::Context 1.302206 - Test2::Manual::Anatomy::EndToEnd 1.302206 - Test2::Manual::Anatomy::Event 1.302206 - Test2::Manual::Anatomy::Hubs 1.302206 - Test2::Manual::Anatomy::IPC 1.302206 - Test2::Manual::Anatomy::Utilities 1.302206 - Test2::Manual::Concurrency 1.302206 - Test2::Manual::Contributing 1.302206 - Test2::Manual::Testing 1.302206 - Test2::Manual::Testing::Introduction 1.302206 - Test2::Manual::Testing::Migrating 1.302206 - Test2::Manual::Testing::Planning 1.302206 - Test2::Manual::Testing::Todo 1.302206 - Test2::Manual::Tooling 1.302206 - Test2::Manual::Tooling::FirstTool 1.302206 - Test2::Manual::Tooling::Formatter 1.302206 - Test2::Manual::Tooling::Nesting 1.302206 - Test2::Manual::Tooling::Plugin::TestExit 1.302206 - Test2::Manual::Tooling::Plugin::TestingDone 1.302206 - Test2::Manual::Tooling::Plugin::ToolCompletes 1.302206 - Test2::Manual::Tooling::Plugin::ToolStarts 1.302206 - Test2::Manual::Tooling::Subtest 1.302206 - Test2::Manual::Tooling::TestBuilder 1.302206 - Test2::Manual::Tooling::Testing 1.302206 - Test2::Mock 1.302206 - Test2::Plugin 1.302206 - Test2::Plugin::BailOnFail 1.302206 - Test2::Plugin::DieOnFail 1.302206 - Test2::Plugin::ExitSummary 1.302206 - Test2::Plugin::SRand 1.302206 - Test2::Plugin::Times 1.302206 - Test2::Plugin::UTF8 1.302206 - Test2::Require 1.302206 - Test2::Require::AuthorTesting 1.302206 - Test2::Require::AutomatedTesting 1.302206 - Test2::Require::EnvVar 1.302206 - Test2::Require::ExtendedTesting 1.302206 - Test2::Require::Fork 1.302206 - Test2::Require::Module 1.302206 - Test2::Require::NonInteractiveTesting 1.302206 - Test2::Require::Perl 1.302206 - Test2::Require::RealFork 1.302206 - Test2::Require::ReleaseTesting 1.302206 - Test2::Require::Threads 1.302206 - Test2::Suite 1.302206 - Test2::Todo 1.302206 - Test2::Tools 1.302206 - Test2::Tools::AsyncSubtest 1.302206 - Test2::Tools::Basic 1.302206 - Test2::Tools::Class 1.302206 - Test2::Tools::ClassicCompare 1.302206 - Test2::Tools::Compare 1.302206 - Test2::Tools::Defer 1.302206 - Test2::Tools::Encoding 1.302206 - Test2::Tools::Event 1.302206 - Test2::Tools::Exception 1.302206 - Test2::Tools::Exports 1.302206 - Test2::Tools::GenTemp 1.302206 - Test2::Tools::Grab 1.302206 - Test2::Tools::Mock 1.302206 - Test2::Tools::Ref 1.302206 - Test2::Tools::Refcount 1.302206 - Test2::Tools::Spec 1.302206 - Test2::Tools::Subtest 1.302206 - Test2::Tools::Target 1.302206 - Test2::Tools::Tester 1.302206 - Test2::Tools::Tiny 1.302206 - Test2::Tools::Warnings 1.302206 - Test2::Util 1.302206 - Test2::Util::ExternalMeta 1.302206 - Test2::Util::Facets2Legacy 1.302206 - Test2::Util::Grabber 1.302206 - Test2::Util::Guard 1.302206 - Test2::Util::HashBase 1.302206 - Test2::Util::Importer 1.302206 - Test2::Util::Ref 1.302206 - Test2::Util::Stash 1.302206 - Test2::Util::Sub 1.302206 - Test2::Util::Table 1.302206 - Test2::Util::Table::Cell 1.302206 - Test2::Util::Table::LineBreak 1.302206 - Test2::Util::Term 1.302206 - Test2::Util::Times 1.302206 - Test2::Util::Trace 1.302206 - Test2::V0 1.302206 - Test2::Workflow 1.302206 - Test2::Workflow::BlockBase 1.302206 - Test2::Workflow::Build 1.302206 - Test2::Workflow::Runner 1.302206 - Test2::Workflow::Task 1.302206 - Test2::Workflow::Task::Action 1.302206 - Test2::Workflow::Task::Group 1.302206 - Test::Builder 1.302206 - Test::Builder::Formatter 1.302206 - Test::Builder::Module 1.302206 - Test::Builder::Tester 1.302206 - Test::Builder::Tester::Color 1.302206 - Test::Builder::Tester::Tie 1.302206 - Test::Builder::TodoDiag 1.302206 - Test::More 1.302206 - Test::Simple 1.302206 - Test::Tester 1.302206 - Test::Tester::Capture 1.302206 - Test::Tester::CaptureRunner 1.302206 - Test::Tester::Delegate 1.302206 - Test::use::ok 1.302206 - ok 1.302206 + Test-Simple-1.302207 + pathname: E/EX/EXODIST/Test-Simple-1.302207.tar.gz + provides: + Test2 1.302207 + Test2::API 1.302207 + Test2::API::Breakage 1.302207 + Test2::API::Context 1.302207 + Test2::API::Instance 1.302207 + Test2::API::InterceptResult 1.302207 + Test2::API::InterceptResult::Event 1.302207 + Test2::API::InterceptResult::Facet 1.302207 + Test2::API::InterceptResult::Hub 1.302207 + Test2::API::InterceptResult::Squasher 1.302207 + Test2::API::Stack 1.302207 + Test2::AsyncSubtest 1.302207 + Test2::AsyncSubtest::Event::Attach 1.302207 + Test2::AsyncSubtest::Event::Detach 1.302207 + Test2::AsyncSubtest::Formatter 1.302207 + Test2::AsyncSubtest::Hub 1.302207 + Test2::Bundle 1.302207 + Test2::Bundle::Extended 1.302207 + Test2::Bundle::More 1.302207 + Test2::Bundle::Simple 1.302207 + Test2::Compare 1.302207 + Test2::Compare::Array 1.302207 + Test2::Compare::Bag 1.302207 + Test2::Compare::Base 1.302207 + Test2::Compare::Bool 1.302207 + Test2::Compare::Custom 1.302207 + Test2::Compare::DeepRef 1.302207 + Test2::Compare::Delta 1.302207 + Test2::Compare::Event 1.302207 + Test2::Compare::EventMeta 1.302207 + Test2::Compare::Float 1.302207 + Test2::Compare::Hash 1.302207 + Test2::Compare::Isa 1.302207 + Test2::Compare::Meta 1.302207 + Test2::Compare::Negatable 1.302207 + Test2::Compare::Number 1.302207 + Test2::Compare::Object 1.302207 + Test2::Compare::OrderedSubset 1.302207 + Test2::Compare::Pattern 1.302207 + Test2::Compare::Ref 1.302207 + Test2::Compare::Regex 1.302207 + Test2::Compare::Scalar 1.302207 + Test2::Compare::Set 1.302207 + Test2::Compare::String 1.302207 + Test2::Compare::Undef 1.302207 + Test2::Compare::Wildcard 1.302207 + Test2::Env 1.302207 + Test2::Event 1.302207 + Test2::Event::Bail 1.302207 + Test2::Event::Diag 1.302207 + Test2::Event::Encoding 1.302207 + Test2::Event::Exception 1.302207 + Test2::Event::Fail 1.302207 + Test2::Event::Generic 1.302207 + Test2::Event::Note 1.302207 + Test2::Event::Ok 1.302207 + Test2::Event::Pass 1.302207 + Test2::Event::Plan 1.302207 + Test2::Event::Skip 1.302207 + Test2::Event::Subtest 1.302207 + Test2::Event::TAP::Version 1.302207 + Test2::Event::V2 1.302207 + Test2::Event::Waiting 1.302207 + Test2::EventFacet 1.302207 + Test2::EventFacet::About 1.302207 + Test2::EventFacet::Amnesty 1.302207 + Test2::EventFacet::Assert 1.302207 + Test2::EventFacet::Control 1.302207 + Test2::EventFacet::Error 1.302207 + Test2::EventFacet::Hub 1.302207 + Test2::EventFacet::Info 1.302207 + Test2::EventFacet::Info::Table 1.302207 + Test2::EventFacet::Meta 1.302207 + Test2::EventFacet::Parent 1.302207 + Test2::EventFacet::Plan 1.302207 + Test2::EventFacet::Render 1.302207 + Test2::EventFacet::Trace 1.302207 + Test2::Formatter 1.302207 + Test2::Formatter::TAP 1.302207 + Test2::Hub 1.302207 + Test2::Hub::Interceptor 1.302207 + Test2::Hub::Interceptor::Terminator 1.302207 + Test2::Hub::Subtest 1.302207 + Test2::IPC 1.302207 + Test2::IPC::Driver 1.302207 + Test2::IPC::Driver::Files 1.302207 + Test2::Manual 1.302207 + Test2::Manual::Anatomy 1.302207 + Test2::Manual::Anatomy::API 1.302207 + Test2::Manual::Anatomy::Context 1.302207 + Test2::Manual::Anatomy::EndToEnd 1.302207 + Test2::Manual::Anatomy::Event 1.302207 + Test2::Manual::Anatomy::Hubs 1.302207 + Test2::Manual::Anatomy::IPC 1.302207 + Test2::Manual::Anatomy::Utilities 1.302207 + Test2::Manual::Concurrency 1.302207 + Test2::Manual::Contributing 1.302207 + Test2::Manual::Testing 1.302207 + Test2::Manual::Testing::Introduction 1.302207 + Test2::Manual::Testing::Migrating 1.302207 + Test2::Manual::Testing::Planning 1.302207 + Test2::Manual::Testing::Todo 1.302207 + Test2::Manual::Tooling 1.302207 + Test2::Manual::Tooling::FirstTool 1.302207 + Test2::Manual::Tooling::Formatter 1.302207 + Test2::Manual::Tooling::Nesting 1.302207 + Test2::Manual::Tooling::Plugin::TestExit 1.302207 + Test2::Manual::Tooling::Plugin::TestingDone 1.302207 + Test2::Manual::Tooling::Plugin::ToolCompletes 1.302207 + Test2::Manual::Tooling::Plugin::ToolStarts 1.302207 + Test2::Manual::Tooling::Subtest 1.302207 + Test2::Manual::Tooling::TestBuilder 1.302207 + Test2::Manual::Tooling::Testing 1.302207 + Test2::Mock 1.302207 + Test2::Plugin 1.302207 + Test2::Plugin::BailOnFail 1.302207 + Test2::Plugin::DieOnFail 1.302207 + Test2::Plugin::ExitSummary 1.302207 + Test2::Plugin::SRand 1.302207 + Test2::Plugin::Times 1.302207 + Test2::Plugin::UTF8 1.302207 + Test2::Require 1.302207 + Test2::Require::AuthorTesting 1.302207 + Test2::Require::AutomatedTesting 1.302207 + Test2::Require::EnvVar 1.302207 + Test2::Require::ExtendedTesting 1.302207 + Test2::Require::Fork 1.302207 + Test2::Require::Module 1.302207 + Test2::Require::NonInteractiveTesting 1.302207 + Test2::Require::Perl 1.302207 + Test2::Require::RealFork 1.302207 + Test2::Require::ReleaseTesting 1.302207 + Test2::Require::Threads 1.302207 + Test2::Suite 1.302207 + Test2::Todo 1.302207 + Test2::Tools 1.302207 + Test2::Tools::AsyncSubtest 1.302207 + Test2::Tools::Basic 1.302207 + Test2::Tools::Class 1.302207 + Test2::Tools::ClassicCompare 1.302207 + Test2::Tools::Compare 1.302207 + Test2::Tools::Defer 1.302207 + Test2::Tools::Encoding 1.302207 + Test2::Tools::Event 1.302207 + Test2::Tools::Exception 1.302207 + Test2::Tools::Exports 1.302207 + Test2::Tools::GenTemp 1.302207 + Test2::Tools::Grab 1.302207 + Test2::Tools::Mock 1.302207 + Test2::Tools::Ref 1.302207 + Test2::Tools::Refcount 1.302207 + Test2::Tools::Spec 1.302207 + Test2::Tools::Subtest 1.302207 + Test2::Tools::Target 1.302207 + Test2::Tools::Tester 1.302207 + Test2::Tools::Tiny 1.302207 + Test2::Tools::Warnings 1.302207 + Test2::Util 1.302207 + Test2::Util::ExternalMeta 1.302207 + Test2::Util::Facets2Legacy 1.302207 + Test2::Util::Grabber 1.302207 + Test2::Util::Guard 1.302207 + Test2::Util::HashBase 1.302207 + Test2::Util::Importer 1.302207 + Test2::Util::Ref 1.302207 + Test2::Util::Stash 1.302207 + Test2::Util::Sub 1.302207 + Test2::Util::Table 1.302207 + Test2::Util::Table::Cell 1.302207 + Test2::Util::Table::LineBreak 1.302207 + Test2::Util::Term 1.302207 + Test2::Util::Times 1.302207 + Test2::Util::Trace 1.302207 + Test2::V0 1.302207 + Test2::Workflow 1.302207 + Test2::Workflow::BlockBase 1.302207 + Test2::Workflow::Build 1.302207 + Test2::Workflow::Runner 1.302207 + Test2::Workflow::Task 1.302207 + Test2::Workflow::Task::Action 1.302207 + Test2::Workflow::Task::Group 1.302207 + Test::Builder 1.302207 + Test::Builder::Formatter 1.302207 + Test::Builder::Module 1.302207 + Test::Builder::Tester 1.302207 + Test::Builder::Tester::Color 1.302207 + Test::Builder::Tester::Tie 1.302207 + Test::Builder::TodoDiag 1.302207 + Test::More 1.302207 + Test::Simple 1.302207 + Test::Tester 1.302207 + Test::Tester::Capture 1.302207 + Test::Tester::CaptureRunner 1.302207 + Test::Tester::Delegate 1.302207 + Test::use::ok 1.302207 + ok 1.302207 requirements: B 0 Data::Dumper 0 diff --git a/bin/cpm b/bin/cpm index 57c2c4c3a..4afd1dba6 100755 --- a/bin/cpm +++ b/bin/cpm @@ -2168,6 +2168,10 @@ $fatpacked{"Proc/ForkSafe.pm"} = '#line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'P package Proc::ForkSafe;use strict;use warnings;our$VERSION='0.001';sub wrap {my ($class,$new,$destroy)=@_;my$obj=$new->();bless {pid=>$$,obj=>$obj,new=>$new,destroy=>$destroy },$class}sub call {my ($self,$method,@argv)=@_;if ($self->{pid}!=$$){$self->{destroy}->($self->{obj})if$self->{destroy};undef$self->{obj};$self->{obj}=$self->{new}->();$self->{pid}=$$}$self->{obj}->$method(@argv)}1; PROC_FORKSAFE +$fatpacked{"Safe/Isa.pm"} = '#line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'SAFE_ISA'; + package Safe::Isa;use strict;use warnings FATAL=>'all';use Scalar::Util ();use Exporter 5.57 qw(import);our$VERSION='1.000010';our@EXPORT=qw($_call_if_object $_isa $_can $_does $_DOES $_call_if_can);our$_call_if_object=sub {my ($obj,$method)=(shift,shift);return unless Scalar::Util::blessed($obj);return$obj->$method(@_)};our ($_isa,$_can)=map {my$method=$_;sub {my$obj=shift;$obj->$_call_if_object($method=>@_)}}qw(isa can);our$_call_if_can=sub {my ($obj,$method)=(shift,shift);return unless$obj->$_call_if_object(can=>$method);return$obj->$method(@_)};our$_does=sub {my$obj=shift;$obj->$_call_if_can(does=>@_)};our$_DOES=sub {my$obj=shift;return unless Scalar::Util::blessed($obj);return$obj->DOES(@_)if$obj->can('DOES');return$obj->isa(@_)};1; +SAFE_ISA + $fatpacked{"Search/Dict.pm"} = '#line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'SEARCH_DICT'; package Search::Dict;require 5.000;require Exporter;my$fc_available;BEGIN {$fc_available='5.015008';if ($] ge $fc_available){require feature;'feature'->import('fc')}}use strict;our$VERSION='1.07';our@ISA=qw(Exporter);our@EXPORT=qw(look);sub look {my($fh,$key,$dict,$fold)=@_;my ($comp,$xfrm);if (@_==3 && ref$dict eq 'HASH'){my$params=$dict;$dict=0;$dict=$params->{dict}if exists$params->{dict};$fold=$params->{fold}if exists$params->{fold};$comp=$params->{comp}if exists$params->{comp};$xfrm=$params->{xfrm}if exists$params->{xfrm}}$comp=sub {$_[0]cmp $_[1]}unless defined$comp;local($_);my$fno=fileno$fh;my@stat;if (defined$fno && $fno >= 0 &&!tied *{$fh}){@stat=eval {stat($fh)}}my($size,$blksize)=@stat[7,11];$size=do {seek($fh,0,2);my$s=tell($fh);seek($fh,0,0);$s}unless defined$size;$blksize ||= 8192;$key =~ s/[^\w\s]//g if$dict;if ($fold){$key=$] ge $fc_available ? fc($key): lc($key)}my($min,$max)=(0,int($size / $blksize));my$mid;while ($max - $min > 1){$mid=int(($max + $min)/ 2);seek($fh,$mid * $blksize,0)or return -1;<$fh> if$mid;$_=<$fh>;$_=$xfrm->($_)if defined$xfrm;chomp;s/[^\w\s]//g if$dict;if ($fold){$_=$] ge $fc_available ? fc($_): lc($_)}if (defined($_)&& $comp->($_,$key)< 0){$min=$mid}else {$max=$mid}}$min *= $blksize;seek($fh,$min,0)or return -1;<$fh> if$min;for (;;){$min=tell($fh);defined($_=<$fh>)or last;$_=$xfrm->($_)if defined$xfrm;chomp;s/[^\w\s]//g if$dict;if ($fold){$_=$] ge $fc_available ? fc($_): lc($_)}last if$comp->($_,$key)>= 0}seek($fh,$min,0);$min}1; SEARCH_DICT @@ -2185,31 +2189,31 @@ $fatpacked{"Sub/Exporter/Progressive.pm"} = '#line '.(1+__LINE__).' "'.__FILE__. SUB_EXPORTER_PROGRESSIVE $fatpacked{"Term/Table.pm"} = '#line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TERM_TABLE'; - package Term::Table;use strict;use warnings;our$VERSION='0.023';use Term::Table::Cell();use Term::Table::Util qw/term_size uni_length USE_GCS/;use Scalar::Util qw/blessed/;use List::Util qw/max sum/;use Carp qw/croak carp/;use Term::Table::HashBase qw/rows _columns collapse max_width mark_tail sanitize show_header auto_columns no_collapse header allow_overflow pad/;sub BORDER_SIZE() {4}sub DIV_SIZE() {3}sub CELL_PAD_SIZE() {2}sub init {my$self=shift;croak "You cannot have a table with no rows" unless$self->{+ROWS}&& @{$self->{+ROWS}};$self->{+MAX_WIDTH}||= term_size();$self->{+NO_COLLAPSE}||= {};if (ref($self->{+NO_COLLAPSE})eq 'ARRAY'){$self->{+NO_COLLAPSE}={map {($_=>1)}@{$self->{+NO_COLLAPSE}}}}if ($self->{+NO_COLLAPSE}&& $self->{+HEADER}){my$header=$self->{+HEADER};for(my$idx=0;$idx < @$header;$idx++){$self->{+NO_COLLAPSE}->{$idx}||= $self->{+NO_COLLAPSE}->{$header->[$idx]}}}$self->{+PAD}=4 unless defined$self->{+PAD};$self->{+COLLAPSE}=1 unless defined$self->{+COLLAPSE};$self->{+SANITIZE}=1 unless defined$self->{+SANITIZE};$self->{+MARK_TAIL}=1 unless defined$self->{+MARK_TAIL};if($self->{+HEADER}){$self->{+SHOW_HEADER}=1 unless defined$self->{+SHOW_HEADER}}else {$self->{+HEADER}=[];$self->{+AUTO_COLUMNS}=1;$self->{+SHOW_HEADER}=0}}sub columns {my$self=shift;$self->regen_columns unless$self->{+_COLUMNS};return$self->{+_COLUMNS}}sub regen_columns {my$self=shift;my$has_header=$self->{+SHOW_HEADER}&& @{$self->{+HEADER}};my%new_col=(width=>0,count=>$has_header ? -1 : 0);my$cols=[map {{%new_col}}@{$self->{+HEADER}}];my@rows=@{$self->{+ROWS}};for my$row ($has_header ? ($self->{+HEADER},@rows): (@rows)){for my$ci (0 .. max(@$cols - 1,@$row - 1)){$cols->[$ci]||= {%new_col}if$self->{+AUTO_COLUMNS};my$c=$cols->[$ci]or next;$c->{idx}||= $ci;$c->{rows}||= [];my$r=$row->[$ci];$r=Term::Table::Cell->new(value=>$r)unless blessed($r)&& ($r->isa('Term::Table::Cell')|| $r->isa('Term::Table::CellStack')|| $r->isa('Term::Table::Spacer'));$r->sanitize if$self->{+SANITIZE};$r->mark_tail if$self->{+MARK_TAIL};my$rs=$r->width;$c->{width}=$rs if$rs > $c->{width};$c->{count}++ if$rs;push @{$c->{rows}}=>$r}}@$cols=grep {$_->{count}> 0 || $self->{+NO_COLLAPSE}->{$_->{idx}}}@$cols if$self->{+COLLAPSE};my$current=sum(map {$_->{width}}@$cols);my$border=sum(BORDER_SIZE,$self->{+PAD},DIV_SIZE * (@$cols - 1));my$total=$current + $border;if ($total > $self->{+MAX_WIDTH}){my$fair=($self->{+MAX_WIDTH}- $border)/ @$cols;if ($fair < 1){return$self->{+_COLUMNS}=$cols if$self->{+ALLOW_OVERFLOW};croak "Table is too large ($total including $self->{+PAD} padding) to fit into max-width ($self->{+MAX_WIDTH})"}my$under=0;my@fix;for my$c (@$cols){if ($c->{width}> $fair){push@fix=>$c}else {$under += $c->{width}}}$fair=int(($self->{+MAX_WIDTH}- $border - $under)/ @fix);if ($fair < 1){return$self->{+_COLUMNS}=$cols if$self->{+ALLOW_OVERFLOW};croak "Table is too large ($total including $self->{+PAD} padding) to fit into max-width ($self->{+MAX_WIDTH})"}$_->{width}=$fair for@fix}$self->{+_COLUMNS}=$cols}sub render {my$self=shift;my$cols=$self->columns;for my$col (@$cols){for my$cell (@{$col->{rows}}){$cell->reset}}my$width=sum(BORDER_SIZE,$self->{+PAD},DIV_SIZE * @$cols,map {$_->{width}}@$cols);my$border='+' .join('+',map {'-' x ($_->{width}+ CELL_PAD_SIZE)}@$cols).'+';my$template='|' .join('|',map {my$w=$_->{width}+ CELL_PAD_SIZE;'%s'}@$cols).'|';my$spacer='|' .join('|',map {' ' x ($_->{width}+ CELL_PAD_SIZE)}@$cols).'|';my@out=($border);my ($row,$split,$found)=(0,0,0);while(1){my@row;my$is_spacer=0;for my$col (@$cols){my$r=$col->{rows}->[$row];unless($r){push@row=>'';next}my ($v,$vw);if ($r->isa('Term::Table::Cell')){my$lw=$r->border_left_width;my$rw=$r->border_right_width;$vw=$col->{width}- $lw - $rw;$v=$r->break->next($vw)}elsif ($r->isa('Term::Table::CellStack')){($v,$vw)=$r->break->next($col->{width})}elsif ($r->isa('Term::Table::Spacer')){$is_spacer=1}if ($is_spacer){last}elsif (defined$v){$found++;my$bcolor=$r->border_color || '';my$vcolor=$r->value_color || '';my$reset=$r->reset_color || '';if (my$need=$vw - uni_length($v)){$v .= ' ' x $need}my$rt="${reset}${bcolor}\%s${reset} ${vcolor}\%s${reset} ${bcolor}\%s${reset}";push@row=>sprintf($rt,$r->border_left || '',$v,$r->border_right || '')}else {push@row=>' ' x ($col->{width}+ 2)}}if (!grep {$_ && m/\S/}@row){last unless$found || $is_spacer;push@out=>$border if$row==0 && $self->{+SHOW_HEADER}&& @{$self->{+HEADER}};push@out=>$spacer if$split > 1 || $is_spacer;$row++;$split=0;$found=0;next}if ($split==1 && @out > 1 && $out[-2]ne $border && $out[-2]ne $spacer){my$last=pop@out;push@out=>($spacer,$last)}push@out=>sprintf($template,@row);$split++}pop@out while@out && $out[-1]eq $spacer;unless (USE_GCS){for my$row (@out){next unless$row =~ m/[[:^ascii:]]/;unshift@out=>"Unicode::GCString is not installed, table may not display all unicode characters properly";last}}return (@out,$border)}sub display {my$self=shift;my ($fh)=@_;my@parts=map "$_\n",$self->render;print$fh @parts if$fh;print@parts}1; + package Term::Table;use strict;use warnings;our$VERSION='0.024';use Term::Table::Cell();use Term::Table::Util qw/term_size uni_length USE_GCS/;use Scalar::Util qw/blessed/;use List::Util qw/max sum/;use Carp qw/croak carp/;use Term::Table::HashBase qw/rows _columns collapse max_width mark_tail sanitize show_header auto_columns no_collapse header allow_overflow pad/;sub BORDER_SIZE() {4}sub DIV_SIZE() {3}sub CELL_PAD_SIZE() {2}sub init {my$self=shift;croak "You cannot have a table with no rows" unless$self->{+ROWS}&& @{$self->{+ROWS}};$self->{+MAX_WIDTH}||= term_size();$self->{+NO_COLLAPSE}||= {};if (ref($self->{+NO_COLLAPSE})eq 'ARRAY'){$self->{+NO_COLLAPSE}={map {($_=>1)}@{$self->{+NO_COLLAPSE}}}}if ($self->{+NO_COLLAPSE}&& $self->{+HEADER}){my$header=$self->{+HEADER};for(my$idx=0;$idx < @$header;$idx++){$self->{+NO_COLLAPSE}->{$idx}||= $self->{+NO_COLLAPSE}->{$header->[$idx]}}}$self->{+PAD}=4 unless defined$self->{+PAD};$self->{+COLLAPSE}=1 unless defined$self->{+COLLAPSE};$self->{+SANITIZE}=1 unless defined$self->{+SANITIZE};$self->{+MARK_TAIL}=1 unless defined$self->{+MARK_TAIL};if($self->{+HEADER}){$self->{+SHOW_HEADER}=1 unless defined$self->{+SHOW_HEADER}}else {$self->{+HEADER}=[];$self->{+AUTO_COLUMNS}=1;$self->{+SHOW_HEADER}=0}}sub columns {my$self=shift;$self->regen_columns unless$self->{+_COLUMNS};return$self->{+_COLUMNS}}sub regen_columns {my$self=shift;my$has_header=$self->{+SHOW_HEADER}&& @{$self->{+HEADER}};my%new_col=(width=>0,count=>$has_header ? -1 : 0);my$cols=[map {{%new_col}}@{$self->{+HEADER}}];my@rows=@{$self->{+ROWS}};for my$row ($has_header ? ($self->{+HEADER},@rows): (@rows)){for my$ci (0 .. max(@$cols - 1,@$row - 1)){$cols->[$ci]||= {%new_col}if$self->{+AUTO_COLUMNS};my$c=$cols->[$ci]or next;$c->{idx}||= $ci;$c->{rows}||= [];my$r=$row->[$ci];$r=Term::Table::Cell->new(value=>$r)unless blessed($r)&& ($r->isa('Term::Table::Cell')|| $r->isa('Term::Table::CellStack')|| $r->isa('Term::Table::Spacer'));$r->sanitize if$self->{+SANITIZE};$r->mark_tail if$self->{+MARK_TAIL};my$rs=$r->width;$c->{width}=$rs if$rs > $c->{width};$c->{count}++ if$rs;push @{$c->{rows}}=>$r}}@$cols=grep {$_->{count}> 0 || $self->{+NO_COLLAPSE}->{$_->{idx}}}@$cols if$self->{+COLLAPSE};my$current=sum(map {$_->{width}}@$cols);my$border=sum(BORDER_SIZE,$self->{+PAD},DIV_SIZE * (@$cols - 1));my$total=$current + $border;if ($total > $self->{+MAX_WIDTH}){my$fair=($self->{+MAX_WIDTH}- $border)/ @$cols;if ($fair < 1){return$self->{+_COLUMNS}=$cols if$self->{+ALLOW_OVERFLOW};croak "Table is too large ($total including $self->{+PAD} padding) to fit into max-width ($self->{+MAX_WIDTH})"}my$under=0;my@fix;for my$c (@$cols){if ($c->{width}> $fair){push@fix=>$c}else {$under += $c->{width}}}$fair=int(($self->{+MAX_WIDTH}- $border - $under)/ @fix);if ($fair < 1){return$self->{+_COLUMNS}=$cols if$self->{+ALLOW_OVERFLOW};croak "Table is too large ($total including $self->{+PAD} padding) to fit into max-width ($self->{+MAX_WIDTH})"}$_->{width}=$fair for@fix}$self->{+_COLUMNS}=$cols}sub render {my$self=shift;my$cols=$self->columns;for my$col (@$cols){for my$cell (@{$col->{rows}}){$cell->reset}}my$width=sum(BORDER_SIZE,$self->{+PAD},DIV_SIZE * @$cols,map {$_->{width}}@$cols);my$border='+' .join('+',map {'-' x ($_->{width}+ CELL_PAD_SIZE)}@$cols).'+';my$template='|' .join('|',map {my$w=$_->{width}+ CELL_PAD_SIZE;'%s'}@$cols).'|';my$spacer='|' .join('|',map {' ' x ($_->{width}+ CELL_PAD_SIZE)}@$cols).'|';my@out=($border);my ($row,$split,$found)=(0,0,0);while(1){my@row;my$is_spacer=0;for my$col (@$cols){my$r=$col->{rows}->[$row];unless($r){push@row=>'';next}my ($v,$vw);if ($r->isa('Term::Table::Cell')){my$lw=$r->border_left_width;my$rw=$r->border_right_width;$vw=$col->{width}- $lw - $rw;$v=$r->break->next($vw)}elsif ($r->isa('Term::Table::CellStack')){($v,$vw)=$r->break->next($col->{width})}elsif ($r->isa('Term::Table::Spacer')){$is_spacer=1}if ($is_spacer){last}elsif (defined$v){$found++;my$bcolor=$r->border_color || '';my$vcolor=$r->value_color || '';my$reset=$r->reset_color || '';if (my$need=$vw - uni_length($v)){$v .= ' ' x $need}my$rt="${reset}${bcolor}\%s${reset} ${vcolor}\%s${reset} ${bcolor}\%s${reset}";push@row=>sprintf($rt,$r->border_left || '',$v,$r->border_right || '')}else {push@row=>' ' x ($col->{width}+ 2)}}if (!grep {$_ && m/\S/}@row){last unless$found || $is_spacer;push@out=>$border if$row==0 && $self->{+SHOW_HEADER}&& @{$self->{+HEADER}};push@out=>$spacer if$split > 1 || $is_spacer;$row++;$split=0;$found=0;next}if ($split==1 && @out > 1 && $out[-2]ne $border && $out[-2]ne $spacer){my$last=pop@out;push@out=>($spacer,$last)}push@out=>sprintf($template,@row);$split++}pop@out while@out && $out[-1]eq $spacer;unless (USE_GCS){for my$row (@out){next unless$row =~ m/[[:^ascii:]]/;unshift@out=>"Unicode::GCString is not installed, table may not display all unicode characters properly";last}}return (@out,$border)}sub display {my$self=shift;my ($fh)=@_;my@parts=map "$_\n",$self->render;print$fh @parts if$fh;print@parts}1; TERM_TABLE $fatpacked{"Term/Table/Cell.pm"} = '#line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TERM_TABLE_CELL'; - package Term::Table::Cell;use strict;use warnings;our$VERSION='0.023';use Term::Table::LineBreak();use Term::Table::Util qw/uni_length/;use List::Util qw/sum/;use Term::Table::HashBase qw/value border_left border_right _break _widths border_color value_color reset_color/;my%CHAR_MAP=("\n"=>"\\n\n","\a"=>'\\a',"\b"=>'\\b',"\e"=>'\\e',"\f"=>'\\f',"\r"=>'\\r',"\t"=>'\\t'," "=>' ',);sub init {my$self=shift;$self->{+VALUE}=defined$self->{+VALUE}? "$self->{+VALUE}" : ''}sub char_id {my$class=shift;my ($char)=@_;return "\\N{U+" .sprintf("\%X",utf8::native_to_unicode(ord($char)))."}"}sub show_char {my$class=shift;my ($char,%props)=@_;return$char if$props{no_newline}&& $char eq "\n";return$CHAR_MAP{$char}|| $class->char_id($char)}sub sanitize {my$self=shift;$self->{+VALUE}=~ s/([\s\t\p{Zl}\p{C}\p{Zp}])/$self->show_char($1)/ge}sub mark_tail {my$self=shift;$self->{+VALUE}=~ s/([\s\t\p{Zl}\p{C}\p{Zp}])$/$1 eq ' ' ? $self->char_id($1) : $self->show_char($1, no_newline => 1)/se}sub value_width {my$self=shift;my$w=$self->{+_WIDTHS}||= {};return$w->{value}if defined$w->{value};my@parts=split /(\n)/,$self->{+VALUE};my$max=0;while (@parts){my$text=shift@parts;my$sep=shift@parts || '';my$len=uni_length("$text");$max=$len if$len > $max}return$w->{value}=$max}sub border_left_width {my$self=shift;$self->{+_WIDTHS}->{left}||= uni_length($self->{+BORDER_LEFT}|| '')}sub border_right_width {my$self=shift;$self->{+_WIDTHS}->{right}||= uni_length($self->{+BORDER_RIGHT}|| '')}sub width {my$self=shift;$self->{+_WIDTHS}->{all}||= sum(map {$self->$_}qw/value_width border_left_width border_right_width/)}sub break {my$self=shift;$self->{+_BREAK}||= Term::Table::LineBreak->new(string=>$self->{+VALUE})}sub reset {my$self=shift;delete$self->{+_BREAK}}1; + package Term::Table::Cell;use strict;use warnings;our$VERSION='0.024';use Term::Table::LineBreak();use Term::Table::Util qw/uni_length/;use List::Util qw/sum/;use Term::Table::HashBase qw/value border_left border_right _break _widths border_color value_color reset_color/;my%CHAR_MAP=("\n"=>"\\n\n","\a"=>'\\a',"\b"=>'\\b',"\e"=>'\\e',"\f"=>'\\f',"\r"=>'\\r',"\t"=>'\\t'," "=>' ',);sub init {my$self=shift;$self->{+VALUE}=defined$self->{+VALUE}? "$self->{+VALUE}" : ''}sub char_id {my$class=shift;my ($char)=@_;return "\\N{U+" .sprintf("\%X",utf8::native_to_unicode(ord($char)))."}"}sub show_char {my$class=shift;my ($char,%props)=@_;return$char if$props{no_newline}&& $char eq "\n";return$CHAR_MAP{$char}|| $class->char_id($char)}sub sanitize {my$self=shift;$self->{+VALUE}=~ s/([\s\t\p{Zl}\p{C}\p{Zp}])/$self->show_char($1)/ge}sub mark_tail {my$self=shift;$self->{+VALUE}=~ s/([\s\t\p{Zl}\p{C}\p{Zp}])$/$1 eq ' ' ? $self->char_id($1) : $self->show_char($1, no_newline => 1)/se}sub value_width {my$self=shift;my$w=$self->{+_WIDTHS}||= {};return$w->{value}if defined$w->{value};my@parts=split /(\n)/,$self->{+VALUE};my$max=0;while (@parts){my$text=shift@parts;my$sep=shift@parts || '';my$len=uni_length("$text");$max=$len if$len > $max}return$w->{value}=$max}sub border_left_width {my$self=shift;$self->{+_WIDTHS}->{left}||= uni_length($self->{+BORDER_LEFT}|| '')}sub border_right_width {my$self=shift;$self->{+_WIDTHS}->{right}||= uni_length($self->{+BORDER_RIGHT}|| '')}sub width {my$self=shift;$self->{+_WIDTHS}->{all}||= sum(map {$self->$_}qw/value_width border_left_width border_right_width/)}sub break {my$self=shift;$self->{+_BREAK}||= Term::Table::LineBreak->new(string=>$self->{+VALUE})}sub reset {my$self=shift;delete$self->{+_BREAK}}1; TERM_TABLE_CELL $fatpacked{"Term/Table/CellStack.pm"} = '#line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TERM_TABLE_CELLSTACK'; - package Term::Table::CellStack;use strict;use warnings;our$VERSION='0.023';use Term::Table::HashBase qw/-cells -idx/;use List::Util qw/max/;sub init {my$self=shift;$self->{+CELLS}||= []}sub add_cell {my$self=shift;push @{$self->{+CELLS}}=>@_}sub add_cells {my$self=shift;push @{$self->{+CELLS}}=>@_}sub sanitize {my$self=shift;$_->sanitize(@_)for @{$self->{+CELLS}}}sub mark_tail {my$self=shift;$_->mark_tail(@_)for @{$self->{+CELLS}}}my@proxy=qw{border_left border_right border_color value_color reset_color border_left_width border_right_width};for my$meth (@proxy){no strict 'refs';*$meth=sub {my$self=shift;$self->{+CELLS}->[$self->{+IDX}]->$meth}}for my$meth (qw{value_width width}){no strict 'refs';*$meth=sub {my$self=shift;return max(map {$_->$meth}@{$self->{+CELLS}})}}sub next {my$self=shift;my ($cw)=@_;while ($self->{+IDX}< @{$self->{+CELLS}}){my$cell=$self->{+CELLS}->[$self->{+IDX}];my$lw=$cell->border_left_width;my$rw=$cell->border_right_width;my$vw=$cw - $lw - $rw;my$it=$cell->break->next($vw);return ($it,$vw)if$it;$self->{+IDX}++}return}sub break {$_[0]}sub reset {my$self=shift;$self->{+IDX}=0;$_->reset for @{$self->{+CELLS}}}1; + package Term::Table::CellStack;use strict;use warnings;our$VERSION='0.024';use Term::Table::HashBase qw/-cells -idx/;use List::Util qw/max/;sub init {my$self=shift;$self->{+CELLS}||= []}sub add_cell {my$self=shift;push @{$self->{+CELLS}}=>@_}sub add_cells {my$self=shift;push @{$self->{+CELLS}}=>@_}sub sanitize {my$self=shift;$_->sanitize(@_)for @{$self->{+CELLS}}}sub mark_tail {my$self=shift;$_->mark_tail(@_)for @{$self->{+CELLS}}}my@proxy=qw{border_left border_right border_color value_color reset_color border_left_width border_right_width};for my$meth (@proxy){no strict 'refs';*$meth=sub {my$self=shift;$self->{+CELLS}->[$self->{+IDX}]->$meth}}for my$meth (qw{value_width width}){no strict 'refs';*$meth=sub {my$self=shift;return max(map {$_->$meth}@{$self->{+CELLS}})}}sub next {my$self=shift;my ($cw)=@_;while ($self->{+IDX}< @{$self->{+CELLS}}){my$cell=$self->{+CELLS}->[$self->{+IDX}];my$lw=$cell->border_left_width;my$rw=$cell->border_right_width;my$vw=$cw - $lw - $rw;my$it=$cell->break->next($vw);return ($it,$vw)if$it;$self->{+IDX}++}return}sub break {$_[0]}sub reset {my$self=shift;$self->{+IDX}=0;$_->reset for @{$self->{+CELLS}}}1; TERM_TABLE_CELLSTACK $fatpacked{"Term/Table/HashBase.pm"} = '#line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TERM_TABLE_HASHBASE'; - package Term::Table::HashBase;use strict;use warnings;our$VERSION='0.023';{no warnings 'once';$Term::Table::HashBase::HB_VERSION='0.008';*Term::Table::HashBase::ATTR_SUBS=\%Object::HashBase::ATTR_SUBS;*Term::Table::HashBase::ATTR_LIST=\%Object::HashBase::ATTR_LIST;*Term::Table::HashBase::VERSION=\%Object::HashBase::VERSION;*Term::Table::HashBase::CAN_CACHE=\%Object::HashBase::CAN_CACHE}require Carp;{no warnings 'once';$Carp::Internal{+__PACKAGE__}=1}BEGIN {*_isa=($] >= 5.010 && require mro)? \&mro::get_linear_isa : sub {no strict 'refs';my@packages=($_[0]);my%seen;for my$package (@packages){push@packages,grep!$seen{$_}++,@{"$package\::ISA"}}return \@packages}}my%SPEC=('^'=>{reader=>1,writer=>0,dep_writer=>1,read_only=>0,strip=>1},'-'=>{reader=>1,writer=>0,dep_writer=>0,read_only=>1,strip=>1},'>'=>{reader=>0,writer=>1,dep_writer=>0,read_only=>0,strip=>1},'<'=>{reader=>1,writer=>0,dep_writer=>0,read_only=>0,strip=>1},'+'=>{reader=>0,writer=>0,dep_writer=>0,read_only=>0,strip=>1},);sub import {my$class=shift;my$into=caller;my$ver=$Term::Table::HashBase::HB_VERSION || $Term::Table::HashBase::VERSION;$Term::Table::HashBase::VERSION{$into}=$ver if!$Term::Table::HashBase::VERSION{$into}|| $Term::Table::HashBase::VERSION{$into}> $ver;my$isa=_isa($into);my$attr_list=$Term::Table::HashBase::ATTR_LIST{$into}||= [];my$attr_subs=$Term::Table::HashBase::ATTR_SUBS{$into}||= {};my%subs=(($into->can('new')? (): (new=>\&_new)),(map %{$Term::Table::HashBase::ATTR_SUBS{$_}|| {}},@{$isa}[1 .. $#$isa]),(map {my$p=substr($_,0,1);my$x=$_;my$spec=$SPEC{$p}|| {reader=>1,writer=>1};substr($x,0,1)='' if$spec->{strip};push @$attr_list=>$x;my ($sub,$attr)=(uc$x,$x);$attr_subs->{$sub}=sub() {$attr};my%out=($sub=>$attr_subs->{$sub});$out{$attr}=sub {$_[0]->{$attr}}if$spec->{reader};$out{"set_$attr"}=sub {$_[0]->{$attr}=$_[1]}if$spec->{writer};$out{"set_$attr"}=sub {Carp::croak("'$attr' is read-only")}if$spec->{read_only};$out{"set_$attr"}=sub {Carp::carp("set_$attr() is deprecated");$_[0]->{$attr}=$_[1]}if$spec->{dep_writer};%out}@_),);no strict 'refs';*{"$into\::$_"}=$subs{$_}for keys%subs}sub attr_list {my$class=shift;my$isa=_isa($class);my%seen;my@list=grep {!$seen{$_}++}map {my@out;if (0.004 > ($Term::Table::HashBase::VERSION{$_}|| 0)){Carp::carp("$_ uses an inlined version of Term::Table::HashBase too old to support attr_list()")}else {my$list=$Term::Table::HashBase::ATTR_LIST{$_};@out=$list ? @$list : ()}@out}reverse @$isa;return@list}sub _new {my$class=shift;my$self;if (@_==1){my$arg=shift;my$type=ref($arg);if ($type eq 'HASH'){$self=bless({%$arg},$class)}else {Carp::croak("Not sure what to do with '$type' in $class constructor")unless$type eq 'ARRAY';my%proto;my@attributes=attr_list($class);while (@$arg){my$val=shift @$arg;my$key=shift@attributes or Carp::croak("Too many arguments for $class constructor");$proto{$key}=$val}$self=bless(\%proto,$class)}}else {$self=bless({@_},$class)}$Term::Table::HashBase::CAN_CACHE{$class}=$self->can('init')unless exists$Term::Table::HashBase::CAN_CACHE{$class};$self->init if$Term::Table::HashBase::CAN_CACHE{$class};$self}1; + package Term::Table::HashBase;use strict;use warnings;our$VERSION='0.024';{no warnings 'once';$Term::Table::HashBase::HB_VERSION='0.008';*Term::Table::HashBase::ATTR_SUBS=\%Object::HashBase::ATTR_SUBS;*Term::Table::HashBase::ATTR_LIST=\%Object::HashBase::ATTR_LIST;*Term::Table::HashBase::VERSION=\%Object::HashBase::VERSION;*Term::Table::HashBase::CAN_CACHE=\%Object::HashBase::CAN_CACHE}require Carp;{no warnings 'once';$Carp::Internal{+__PACKAGE__}=1}BEGIN {*_isa=($] >= 5.010 && require mro)? \&mro::get_linear_isa : sub {no strict 'refs';my@packages=($_[0]);my%seen;for my$package (@packages){push@packages,grep!$seen{$_}++,@{"$package\::ISA"}}return \@packages}}my%SPEC=('^'=>{reader=>1,writer=>0,dep_writer=>1,read_only=>0,strip=>1},'-'=>{reader=>1,writer=>0,dep_writer=>0,read_only=>1,strip=>1},'>'=>{reader=>0,writer=>1,dep_writer=>0,read_only=>0,strip=>1},'<'=>{reader=>1,writer=>0,dep_writer=>0,read_only=>0,strip=>1},'+'=>{reader=>0,writer=>0,dep_writer=>0,read_only=>0,strip=>1},);sub import {my$class=shift;my$into=caller;my$ver=$Term::Table::HashBase::HB_VERSION || $Term::Table::HashBase::VERSION;$Term::Table::HashBase::VERSION{$into}=$ver if!$Term::Table::HashBase::VERSION{$into}|| $Term::Table::HashBase::VERSION{$into}> $ver;my$isa=_isa($into);my$attr_list=$Term::Table::HashBase::ATTR_LIST{$into}||= [];my$attr_subs=$Term::Table::HashBase::ATTR_SUBS{$into}||= {};my%subs=(($into->can('new')? (): (new=>\&_new)),(map %{$Term::Table::HashBase::ATTR_SUBS{$_}|| {}},@{$isa}[1 .. $#$isa]),(map {my$p=substr($_,0,1);my$x=$_;my$spec=$SPEC{$p}|| {reader=>1,writer=>1};substr($x,0,1)='' if$spec->{strip};push @$attr_list=>$x;my ($sub,$attr)=(uc$x,$x);$attr_subs->{$sub}=sub() {$attr};my%out=($sub=>$attr_subs->{$sub});$out{$attr}=sub {$_[0]->{$attr}}if$spec->{reader};$out{"set_$attr"}=sub {$_[0]->{$attr}=$_[1]}if$spec->{writer};$out{"set_$attr"}=sub {Carp::croak("'$attr' is read-only")}if$spec->{read_only};$out{"set_$attr"}=sub {Carp::carp("set_$attr() is deprecated");$_[0]->{$attr}=$_[1]}if$spec->{dep_writer};%out}@_),);no strict 'refs';*{"$into\::$_"}=$subs{$_}for keys%subs}sub attr_list {my$class=shift;my$isa=_isa($class);my%seen;my@list=grep {!$seen{$_}++}map {my@out;if (0.004 > ($Term::Table::HashBase::VERSION{$_}|| 0)){Carp::carp("$_ uses an inlined version of Term::Table::HashBase too old to support attr_list()")}else {my$list=$Term::Table::HashBase::ATTR_LIST{$_};@out=$list ? @$list : ()}@out}reverse @$isa;return@list}sub _new {my$class=shift;my$self;if (@_==1){my$arg=shift;my$type=ref($arg);if ($type eq 'HASH'){$self=bless({%$arg},$class)}else {Carp::croak("Not sure what to do with '$type' in $class constructor")unless$type eq 'ARRAY';my%proto;my@attributes=attr_list($class);while (@$arg){my$val=shift @$arg;my$key=shift@attributes or Carp::croak("Too many arguments for $class constructor");$proto{$key}=$val}$self=bless(\%proto,$class)}}else {$self=bless({@_},$class)}$Term::Table::HashBase::CAN_CACHE{$class}=$self->can('init')unless exists$Term::Table::HashBase::CAN_CACHE{$class};$self->init if$Term::Table::HashBase::CAN_CACHE{$class};$self}1; TERM_TABLE_HASHBASE $fatpacked{"Term/Table/LineBreak.pm"} = '#line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TERM_TABLE_LINEBREAK'; - package Term::Table::LineBreak;use strict;use warnings;our$VERSION='0.023';use Carp qw/croak/;use Scalar::Util qw/blessed/;use Term::Table::Util qw/uni_length/;use Term::Table::HashBase qw/string gcstring _len _parts idx/;sub init {my$self=shift;croak "string is a required attribute" unless defined$self->{+STRING}}sub columns {uni_length($_[0]->{+STRING})}sub break {my$self=shift;my ($len)=@_;$self->{+_LEN}=$len;$self->{+IDX}=0;my$str=$self->{+STRING}."";my@parts;my@chars=split //,$str;while (@chars){my$size=0;my$part='';until ($size==$len){my$char=shift@chars;$char='' unless defined$char;my$l=uni_length("$char");last unless$l;last if$char eq "\n";if ($size + $l > $len){unshift@chars=>$char;last}$size += $l;$part .= $char}shift@chars if$size==$len && @chars && $chars[0]eq "\n";until ($size==$len){$part .= ' ';$size += 1}push@parts=>$part}$self->{+_PARTS}=\@parts}sub next {my$self=shift;if (@_){my ($len)=@_;$self->break($len)if!$self->{+_LEN}|| $self->{+_LEN}!=$len}else {croak "String has not yet been broken" unless$self->{+_PARTS}}my$idx=$self->{+IDX}++;my$parts=$self->{+_PARTS};return undef if$idx >= @$parts;return$parts->[$idx]}1; + package Term::Table::LineBreak;use strict;use warnings;our$VERSION='0.024';use Carp qw/croak/;use Scalar::Util qw/blessed/;use Term::Table::Util qw/uni_length/;use Term::Table::HashBase qw/string gcstring _len _parts idx/;sub init {my$self=shift;croak "string is a required attribute" unless defined$self->{+STRING}}sub columns {uni_length($_[0]->{+STRING})}sub break {my$self=shift;my ($len)=@_;$self->{+_LEN}=$len;$self->{+IDX}=0;my$str=$self->{+STRING}."";my@parts;my@chars=split //,$str;while (@chars){my$size=0;my$part='';until ($size==$len){my$char=shift@chars;$char='' unless defined$char;my$l=uni_length("$char");last unless$l;last if$char eq "\n";if ($size + $l > $len){unshift@chars=>$char;last}$size += $l;$part .= $char}shift@chars if$size==$len && @chars && $chars[0]eq "\n";until ($size==$len){$part .= ' ';$size += 1}push@parts=>$part}$self->{+_PARTS}=\@parts}sub next {my$self=shift;if (@_){my ($len)=@_;$self->break($len)if!$self->{+_LEN}|| $self->{+_LEN}!=$len}else {croak "String has not yet been broken" unless$self->{+_PARTS}}my$idx=$self->{+IDX}++;my$parts=$self->{+_PARTS};return undef if$idx >= @$parts;return$parts->[$idx]}1; TERM_TABLE_LINEBREAK $fatpacked{"Term/Table/Spacer.pm"} = '#line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TERM_TABLE_SPACER'; - package Term::Table::Spacer;use strict;use warnings;our$VERSION='0.023';sub new {bless {},$_[0]}sub width {1}sub sanitize {}sub mark_tail {}sub reset {}1; + package Term::Table::Spacer;use strict;use warnings;our$VERSION='0.024';sub new {bless {},$_[0]}sub width {1}sub sanitize {}sub mark_tail {}sub reset {}1; TERM_TABLE_SPACER $fatpacked{"Term/Table/Util.pm"} = '#line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TERM_TABLE_UTIL'; - package Term::Table::Util;use strict;use warnings;use Config qw/%Config/;our$VERSION='0.023';use base 'Exporter';our@EXPORT_OK=qw/term_size USE_GCS USE_TERM_READKEY USE_TERM_SIZE_ANY uni_length/;sub DEFAULT_SIZE() {80}my$IO;BEGIN {open($IO,'>&',*STDOUT)or die "Could not clone STDOUT"}sub try(&) {my$code=shift;local ($@,$?,$!);my$ok=eval {$code->();1};my$err=$@;return ($ok,$err)}my ($tsa)=try {require Term::Size::Any;Term::Size::Any->import('chars')};my ($trk)=try {require Term::ReadKey};$trk &&= Term::ReadKey->can('GetTerminalSize');if (!-t $IO){*USE_TERM_READKEY=sub() {0};*USE_TERM_SIZE_ANY=sub() {0};*term_size=sub {return$ENV{TABLE_TERM_SIZE}if$ENV{TABLE_TERM_SIZE};return DEFAULT_SIZE}}elsif ($tsa){*USE_TERM_READKEY=sub() {0};*USE_TERM_SIZE_ANY=sub() {1};*_term_size=sub {my$size=chars($IO);return DEFAULT_SIZE if!$size;return DEFAULT_SIZE if$size < DEFAULT_SIZE;return$size}}elsif ($trk){*USE_TERM_READKEY=sub() {1};*USE_TERM_SIZE_ANY=sub() {0};*_term_size=sub {my$total;try {my@warnings;{local$SIG{__WARN__}=sub {push@warnings=>@_};($total)=Term::ReadKey::GetTerminalSize($IO)}@warnings=grep {$_ !~ m/Unable to get Terminal Size/}@warnings;warn@warnings if@warnings};return DEFAULT_SIZE if!$total;return DEFAULT_SIZE if$total < DEFAULT_SIZE;return$total}}else {*USE_TERM_READKEY=sub() {0};*USE_TERM_SIZE_ANY=sub() {0};*term_size=sub {return$ENV{TABLE_TERM_SIZE}if$ENV{TABLE_TERM_SIZE};return DEFAULT_SIZE}}if (USE_TERM_READKEY()|| USE_TERM_SIZE_ANY()){if (index($Config{sig_name},'WINCH')>= 0){my$changed=0;my$polled=-1;$SIG{WINCH}=sub {$changed++};my$size;*term_size=sub {return$ENV{TABLE_TERM_SIZE}if$ENV{TABLE_TERM_SIZE};unless ($changed==$polled){$polled=$changed;$size=_term_size()}return$size}}else {*term_size=sub {return$ENV{TABLE_TERM_SIZE}if$ENV{TABLE_TERM_SIZE};_term_size()}}}my ($gcs,$err)=try {require Unicode::GCString};if ($gcs){*USE_GCS=sub() {1};*uni_length=sub {Unicode::GCString->new($_[0])->columns}}else {*USE_GCS=sub() {0};*uni_length=sub {length($_[0])}}1; + package Term::Table::Util;use strict;use warnings;use Config qw/%Config/;our$VERSION='0.024';use base 'Exporter';our@EXPORT_OK=qw/term_size USE_GCS USE_TERM_READKEY USE_TERM_SIZE_ANY uni_length/;sub DEFAULT_SIZE() {80}my$IO;BEGIN {open($IO,'>&',*STDOUT)or die "Could not clone STDOUT"}sub try(&) {my$code=shift;local ($@,$?,$!);my$ok=eval {$code->();1};my$err=$@;return ($ok,$err)}my ($tsa)=try {require Term::Size::Any;Term::Size::Any->import('chars')};my ($trk)=try {require Term::ReadKey};$trk &&= Term::ReadKey->can('GetTerminalSize');if (!-t $IO){*USE_TERM_READKEY=sub() {0};*USE_TERM_SIZE_ANY=sub() {0};*term_size=sub {return$ENV{TABLE_TERM_SIZE}if$ENV{TABLE_TERM_SIZE};return DEFAULT_SIZE}}elsif ($tsa){*USE_TERM_READKEY=sub() {0};*USE_TERM_SIZE_ANY=sub() {1};*_term_size=sub {my$size=chars($IO);return DEFAULT_SIZE if!$size;return DEFAULT_SIZE if$size < DEFAULT_SIZE;return$size}}elsif ($trk){*USE_TERM_READKEY=sub() {1};*USE_TERM_SIZE_ANY=sub() {0};*_term_size=sub {my$total;try {my@warnings;{local$SIG{__WARN__}=sub {push@warnings=>@_};($total)=Term::ReadKey::GetTerminalSize($IO)}@warnings=grep {$_ !~ m/Unable to get Terminal Size/}@warnings;warn@warnings if@warnings};return DEFAULT_SIZE if!$total;return DEFAULT_SIZE if$total < DEFAULT_SIZE;return$total}}else {*USE_TERM_READKEY=sub() {0};*USE_TERM_SIZE_ANY=sub() {0};*term_size=sub {return$ENV{TABLE_TERM_SIZE}if$ENV{TABLE_TERM_SIZE};return DEFAULT_SIZE}}if (USE_TERM_READKEY()|| USE_TERM_SIZE_ANY()){if (index($Config{sig_name},'WINCH')>= 0){my$changed=0;my$polled=-1;$SIG{WINCH}=sub {$changed++};my$size;*term_size=sub {return$ENV{TABLE_TERM_SIZE}if$ENV{TABLE_TERM_SIZE};unless ($changed==$polled){$polled=$changed;$size=_term_size()}return$size}}else {*term_size=sub {return$ENV{TABLE_TERM_SIZE}if$ENV{TABLE_TERM_SIZE};_term_size()}}}my ($gcs,$err)=try {require Unicode::GCString};if ($gcs){*USE_GCS=sub() {1};*uni_length=sub {Unicode::GCString->new($_[0])->columns}}else {*USE_GCS=sub() {0};*uni_length=sub {length($_[0])}}1; TERM_TABLE_UTIL $fatpacked{"Tie/Handle/Offset.pm"} = '#line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TIE_HANDLE_OFFSET';