检查perl中的版本

时间:2013-12-09 04:23:30

标签: regex perl version

我正在编写用于检查版本的子例程,但有些我没有得到正确的输出     如果版本1<版本2然后-1     如果版本1 =版本2则为0     如果版本1>版本2然后1    不确定为什么我没有得到正确的结果

sub checkVersion
    {
        my $var1 = shift;
        my $var2 = shift;
        my @var1_seg = split (/./, $var1);
        my @var2_seg = split (/./, $var2);
        for( my $i = 0; $i < @var1_seg; $i++ ) 
        {
            if( $var1_seg[$i] < $var2_seg[$i] ) 
            {
                 return -1;
            }
            elsif( $var1_seg[$i] > $var2_seg[$i] )
            {
                 return 1;
            }
         }

      return 0;
    }

3 个答案:

答案 0 :(得分:3)

在一个注释中,您需要使用split来转义点.,因为它被认为是正则表达式中的特殊字符。 相反,使用version模块可以很容易地比较版本号:

use strict;
use warnings;
use version;
use feature 'say';

say checkVersion('5.10.0', '5.14.0'); # Returns -1
say checkVersion('5.10.0', '5.10.0'); # Returns  0
say checkVersion('5.14.0', '5.10.0'); # Returns  1

sub checkVersion {
   my $var1 = shift;
   my $var2 = shift;
   return version->parse($var1) <=> version->parse($var2);
}

答案 1 :(得分:1)

使用version代替。在处理版本时,此模块非常有用。

答案 2 :(得分:0)

不应该这样:

my @var1_seg = split (/./, $v1);
my @var2_seg = split (/./, $v2);

是这样的:

my @var1_seg = split (/./, $var1);
my @var2_seg = split (/./, $var2);

作为一般性评论,总是'使用严格;'在程序的顶部,以避免这样的问题。