2013-12-09 52 views
1

我写子例行检查版本,但一些如何我如果版本1个<版本2,然后-1 如果版本1 = 2版则0 如果VERSION1>第2版,然后我没有得到正确的输出不知道为什么,我没有得到正确的结果检查版本在Perl

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; 
    } 

回答

0

不应该这样:

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

是这样的:

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

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

+0

那些只是var1和var2,这是错误的问题没有在实际脚本中 – user2856109

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); 
} 
+0

是否有任何逻辑错误?我觉得有些东西不是写在逻辑上 – user2856109

+0

输入是4.0和3.0.2 我相信我没有检查过主版本是否相同,次版本是否少于或多于 – user2856109

+0

或者只是'return version-> parse($ var1)<=>版本 - >解析($ var2);' – ikegami