我正在编写用于检查版本的子例程,但有些我没有得到正确的输出 如果版本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;
}
答案 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);
作为一般性评论,总是'使用严格;'在程序的顶部,以避免这样的问题。