2013-11-14 5 views
1

У меня возникают трудности при сравнении двух версий. Если мы имеем 5.1 и 5.10, то 5.1 должно быть меньше 5.10. Я знаю, что в десятичной форме он должен читать 5.01 и 5.10. Но есть ли способ сравнить его с использованием 5.1 и 5.10?Perl сравнение номеров версий 5.1 <5.10

perl -e 'use warnings; use version; if (version->parse("5.1") < version->parse("5.10")) { print "ok"; }' 
+2

Пожалуйста, не используйте эхо и обратные метки для печати однострочных изображений Perl. Perl может печатать просто отлично. – TLP

+0

уверен. Я изменил это. но это ничего не меняет в этой проблеме. – Chris

ответ

6

Документация version модуль показывает, как это сделать:

print version->declare('5.1')->numify; # 5.00100 
print version->declare('5.10')->numify; # 5.01000 
+0

Отлично. Большое спасибо – Chris

+0

Вам не нужно нумеровать; вы можете использовать '<' и такие на возвращаемых объектах. – ikegami

+0

@ikegami: Правильно, вы – Zaid

0

Я не уверен, что понимаю, чего вы пытаетесь достичь. Perl имеет два оператора сравнения, для чисел и строк. Ни один из них не работает так, как вы хотите. Если вы просто хотите, чтобы избежать использования version, вы можете, например, использовать split:

#!/usr/bin/perl 
use warnings; 
use strict; 
use feature qw{ say }; 

my @v = qw(5.1 5.10); 

sub by_version { 
    my @a = split /\./, $a; 
    my @b = split /\./, $b; 
    $a[0] <=> $b[0] or $a[1] <=> $b[1]; 
} 

say for sort by_version @v; 
3

Используйте модуль кода CPAN::Version:

use CPAN::Version; 
say CPAN::Version->vlt("5.1","5.10") ? "OK" : "KO";  

мощность:

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