2013-12-09 92 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