App-Midgen
view release on metacpan or search on metacpan
lib/App/Midgen/Role/Eval.pm view on Meta::CPAN
package App::Midgen::Role::Eval;
use constant {NONE => q{}, TWO => 2,};
use Moo::Role;
requires
qw( ppi_document debug verbose format xtest _process_found_modules develop meta2 );
use Try::Tiny;
use Data::Printer {caller_info => 1,};
use List::MoreUtils qw(any firstidx);
# Load time and dependencies negate execution time
# use namespace::clean -except => 'meta';
our $VERSION = '0.34';
$VERSION = eval $VERSION; ## no critic
#######
# composed method - xtests_eval
#######
sub xtests_eval {
my $self = shift;
my $phase_relationship = shift || NONE;
my @modules;
my @version_strings;
#PPI::Document
# PPI::Statement::Sub
# PPI::Token::Word 'sub'
# PPI::Token::Whitespace ' '
# PPI::Token::Word '_assert_ssl'
# PPI::Token::Whitespace ' '
# PPI::Structure::Block { ... }
# PPI::Token::Whitespace '\n'
# PPI::Token::Whitespace '\t\t'
# PPI::Statement
# PPI::Token::Word 'eval'
# PPI::Token::Whitespace ' '
# PPI::Structure::Block { ... }
# PPI::Token::Whitespace ' '
# PPI::Statement::Include
# PPI::Token::Word 'require'
# PPI::Token::Whitespace ' '
# PPI::Token::Word 'IO::Socket::SSL'
# PPI::Token::Structure ';'
# PPI::Token::Whitespace ' '
# PPI::Statement
# PPI::Token::Word 'IO::Socket::SSL'
# PPI::Token::Operator '->'
# PPI::Token::Word 'VERSION'
# PPI::Structure::List ( ... )
# PPI::Statement::Expression
# PPI::Token::Number::Float '1.44'
# PPI::Token::Whitespace ' '
# PPI::Token::Structure ';'
# PPI::Token::Whitespace '\n'
try {
my @chunks3 = @{$self->ppi_document->find('PPI::Statement::Sub')};
foreach my $chunk (@chunks3) {
if (
$chunk->find(
sub {
$_[1]->isa('PPI::Token::Word')
and $_[1]->content =~ m{\A(?:sub)\z};
}
)
)
{
my $module_name;
my $version_string;
for (0 .. $#{$chunk->{children}}) {
if ($chunk->{children}[$_]->isa('PPI::Structure::Block')) {
my $ppi_sb = $chunk->{children}[$_]
if $chunk->{children}[$_]->isa('PPI::Structure::Block');
for (0 .. $#{$ppi_sb->{children}}) {
if ($ppi_sb->{children}[$_]->isa('PPI::Statement')) {
my $ppi_s = $ppi_sb->{children}[$_]
if $ppi_sb->{children}[$_]->isa('PPI::Statement');
my @chunks3 = @{$ppi_s->{children}};
if (
any {
$_->isa('PPI::Token::Word')
and $_->content =~ m{\A(?:eval|try)\z};
}
@{$ppi_s->{children}}
)
{
my @ppisb = firstidx {
$_->isa('PPI::Structure::Block');
}
@{$ppi_s->{children}};
# extract first Structure::Block
my $ppi_sb = $ppisb[0];
$self->_eval_info($ppi_sb, \$module_name, \$version_string);
print "Option3 $module_name - $version_string\n"
if $self->debug;
if (version::is_lax($version_string)) {
push @modules, $module_name;
$version_string
( run in 0.532 second using v1.01-cache-2.11-cpan-39bf76dae61 )