2013-12-09 4 views
1

Я пишу подпрограмму для проверки версии, но некоторые, как я не получаю правильный вывод если версия 1 < версии 2, то -1 если версия 1 = версия 2, то 0 если version1> версия 2, то 1 не уверен, почему я не получаю правильный результатпроверки версии в 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) <=> version-> parse ($ var2); ' – ikegami

1

Использование version Вместо этого. Этот модуль очень полезен, когда вы имеете дело с версиями.

Смежные вопросы