1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
#!/usr/bin/env perl
use strict;
use warnings;
use Getopt::Long qw(:config bundling passthrough);
use Perl::MinimumVersion::Fast;
GetOptions(
"e:s" => \my $expr,
"v" => \my $verbose,
) or die "usage: $0 [file | -e expr]\n";
if (@ARGV) {
report($_, $_) for @ARGV;
}
elsif ($expr) {
report("-e", \$expr);
}
else {
my $src = do { local $/; <> };
report("STDIN", \$src);
}
sub report {
my($in, $src) = @_;
my $v = Perl::MinimumVersion::Fast->new($src);
printf "%s: %s / %s\n", $in, $v->minimum_version, $v->minimum_syntax_version;
$verbose or return;
my @markers = $v->version_markers;
while (@markers) {
my($pv, $m) = splice @markers, 0, 2;
printf "%-10s %s\n", $pv, $_ for @$m;
}
}
__END__
=head1 NAME
perlver-fast - Minimum perl version detector
=head1 SYNOPSIS
reports minimum version and minimum syntax version. Adding C<-c> tries to
add detailed information.
Analyze from file list
$ perlver-fast lib/Acme/Kensiro.pm t/00.load.t
lib/Acme/Kensiro.pm: 5.008001 / 5.006
t/00.load.t: 5.006 / 5.006
Analyze from STDIN
$ perlver-fast < lib/Acme/Kensiro.pm
STDIN: 5.008001 / 5.006
Analyze from expression
$ perlver-fast -e '$a //= 42'
-e: 5.010 / 5.010
$ perlver-fast -v -e '$a //= 42'
-e: 5.010 / 5.010
5.010 //= operator
$ perlver-fast -e 'use 5.24.1; $a //= 42'
-e: 5.24 / 5.010
|