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 )