Perl-MinimumVersion

 view release on metacpan or  search on metacpan

lib/Perl/MinimumVersion.pm  view on Meta::CPAN

	} );
	return (defined($version)?"$version.0":undef, $obj);
}

# list copied from experimental.pm v0.021 itself
my %experimental =
(
    array_base      => '5',
    autoderef       => '5.14',
    bitwise         => '5.22',
    const_attr      => '5.22',
    current_sub     => '5.16',
    declared_refs   => '5.26',
    evalbytes       => '5.16',
    fc              => '5.16',
    isa             => '5.32',
    lexical_topic   => '5.10',
    lexical_subs    => '5.18',
    postderef       => '5.20',
    postderef_qq    => '5.20',
    refaliasing     => '5.22',
    regex_sets      => '5.18',
    say             => '5.10',
    smartmatch      => '5.10',
    signatures      => '5.20',
    state           => '5.10',
    switch          => '5.10',
    unicode_eval    => '5.16',
    unicode_strings => '5.12',
);
my $experimental_regexp = join('|', keys %experimental);
sub _experimental_bundle {
    my ($version, $obj);

    shift->Document->find( sub {
        return '' unless $_[1]->isa('PPI::Statement::Include') 
                     and $_[1]->pragma eq 'experimental';

        my @child = $_[1]->schildren;
        my @args = @child[1..$#child]; # skip 'use', 'experimental' and ';'
        foreach my $arg (@args) {
            my $v = 0;
            $v = $1 if ($arg->content =~ /:(5\.\d+)(?:\.\d+)?/);
            $v = max($v, $experimental{$1}) if ($arg->content =~ /\b($experimental_regexp)\b/);

            if ($v and $v > ($version || 0) ) {
                $version = $v;
                $obj = $_[1];
            }
        }
        return '';
    } );

    return (defined($version)?"$version.0":undef, $obj);
}

my %SCHEDULED_BLOCK =
(
    'INIT'      => '5.006',
    'CHECK'     => '5.006002',
    'UNITCHECK' => '5.010',
);

sub _scheduled_blocks
{
    my @versions;
    my ($version, $obj);

	shift->Document->find( sub {
		$_[1]->isa('PPI::Statement::Scheduled') or return '';
        ($_[1]->children)[0]->isa('PPI::Token::Word') or return '';
        my $function = (($_[1]->children)[0])->content;
        exists( $SCHEDULED_BLOCK{ $function }) or return '';

        my $v = $SCHEDULED_BLOCK{ ($_[1]->children)[0]->content };
        if ($v and $v > ($version || 0) ) {
            $version = $v;
            $obj = $_[1];
        }

		return '';
	} );
	return (defined($version) ? $version : undef, $obj);
}

sub _regex {
	my $self = shift;
	my @versions;
	my ($version, $obj);
	$self->Document->find( sub {
		return '' unless
			grep { $_[1]->isa($_) }
			qw/PPI::Token::QuoteLike::Regexp PPI::Token::Regexp::Match PPI::Token::Regexp::Substitute/;
			my $re = PPIx::Regexp->new( $_[1] );
			my $v = $re->perl_version_introduced;
			if ($v and $v > ($version || 0) ) {
				$version = $v;
				$obj = $_[1];
			}
		return '';
	} );
	my $tr_r_version = version->new('5.013.007');
	$self->Document->find( sub {
		return '' unless
			$_[1]->isa(q/PPI::Token::Regexp::Transliterate/);
			if( exists $_[1]->get_modifiers->{r}
				&& $tr_r_version > ( $version || 0 )
			) {
				$version = $tr_r_version;
				$obj = $_[1];
			}
		return '';
	} );
	$version = undef if ($version and $version eq '5.000');
	return ($version, $obj);
}

# Check for use re "/flags";
sub _re_flags {
	my ($version, $obj);
	shift->Document->find( sub {



( run in 2.015 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )