7 if ($_[0] =~ m!^((?:\d+\.)+\d+)$!) {
8 my ($maj, $min) = split /\./, $1;
9 return int($maj) * 256 + int($min);
16 my ($op, $v1, $v2) = @_;
18 if ($op eq 'lt') { return $v1 < $v2 }
19 elsif ($op eq 'le') { return $v1 <= $v2 }
20 elsif ($op eq 'gt') { return $v1 > $v2 }
21 elsif ($op eq 'ge') { return $v1 >= $v2 }
22 elsif ($op eq 'eq') { return $v1 == $v2 }
28 my ($basename, $compare, $maxvstr) = @_;
31 my $cmpversion = vernum
($maxvstr);
34 foreach my $dir (split /:/, $ENV{'PATH'}) {
35 foreach my $bin (glob("$dir/$basename?*"), "$dir/$basename") {
36 if (-x
$bin && open BIN
, '-|', $bin, '--version') {
38 my $line = readline(BIN
) || '';
40 foreach my $token (split /\s+/, $line) {
41 $vers = vernum
($token);
45 if ($vers > 0 && (!$cmpversion || vercmp
($compare, $vers, $cmpversion))) {
46 if ($vers > $lastversion) {
60 my $bin = findbin
($ARGV[0], $ARGV[1], $ARGV[2]);
67 warn "Cannot find a $ARGV[0] command with version $ARGV[1] $ARGV[2]\n";