以下程序是否正确比较两个版本? 比如v1 = 3.0.1,v2 = 4.5.5
sub VerChecker
{
my $v1 = shift;
my $v2 = shift;
my @v1_parts = split (/./, $v1);
my @v2_parts = split (/./, $v2);
for( my $i = 0; $i < @v1_parts; $i++ )
{
if( $v1_parts[$i] < $v2_parts[$i] )
{
return -1;
}
elsif( $v1_parts[$i] > $v2_parts[$i] )
{
return 1;
}
}
# equal !
return 0;
}
您能否更正上述代码
答案 0 :(得分:1)
#!/bin/env perl
use strict;
use warnings;
sub ver_checker {
my ($v1, $v2) = @_;
my @v1_parts = split(/\./, $v1);
my @v2_parts = split(/\./, $v2);
my $num_parts = scalar @v1_parts;
if (scalar @v2_parts > $num_parts) {
$num_parts = scalar @v2_parts;
}
for my $part (0 .. $num_parts-1) {
$v1_parts[$part] = sprintf("%04d", $v1_parts[$part] // 0);
$v2_parts[$part] = sprintf("%04d", $v2_parts[$part] // 0);
}
return join('', @v1_parts) cmp join('', @v2_parts);
}
print ver_checker('3.0.1', '4.5.5')."\n";
print ver_checker('3.0', '4.5.5')."\n";
print ver_checker('3.0.1', '4')."\n";
print ver_checker('5', '4')."\n";
有几点要提及:
use strict; use warnings;
总是3.1
vs 5.0.1
基本上变为3.1.0
vs 5.0.1
,并填充到{{{}} 1}} vs 000300010000
。000500000001
会返回您的cmp
值。澄清你的分裂无效的原因: 你的分裂需要逃避这段时间。你分裂了每个角色,这意味着没有捕获。运行此脚本以便自己查看。
-1/0/1