Regex 用perl检查版本

Regex 用perl检查版本,regex,perl,version,Regex,Perl,Version,我正在编写检查版本的子例程,但有些人认为我没有得到正确的输出 如果版本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 &

我正在编写检查版本的子例程,但有些人认为我没有得到正确的输出 如果版本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;
    }
子检查版本
{
我的$var1=班次;
我的$var2=班次;
my@var1_seg=split(/。/,$var1);
my@var2_seg=split(/。/,$var2);
对于(my$i=0;$i<@var1_seg;$i++)
{
如果($var1_seg[$i]<$var2_seg[$i])
{
返回-1;
}
elsif($var1_seg[$i]>var2_seg[$i])
{
返回1;
}
}
返回0;
}
这不应该:

my @var1_seg = split (/./, $v1);
my @var2_seg = split (/./, $v2);
是这样的:

my @var1_seg = split (/./, $var1);
my @var2_seg = split (/./, $var2);
作为一般性评论,请始终“严格使用;”在程序的顶部,以避免此类问题。

这不应该:

my @var1_seg = split (/./, $v1);
my @var2_seg = split (/./, $v2);
是这样的:

my @var1_seg = split (/./, $var1);
my @var2_seg = split (/./, $var2);

作为一般性评论,请始终“严格使用;”请注意,您需要使用split对点进行转义,因为它被认为是正则表达式中的一个特殊字符。 取而代之的是,使用模块可以非常轻松地比较版本号:

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);
}
使用严格;
使用警告;
使用版本;
使用特征“说”;
说checkVersion('5.10.0','5.14.0');#返回-1
说checkVersion('5.10.0','5.10.0');#返回0
说checkVersion('5.14.0','5.10.0');#返回1
子检查版本{
我的$var1=班次;
我的$var2=班次;
返回版本->解析($var1)版本->解析($var2);
}

注意,需要使用split转义点
,因为它被认为是正则表达式中的特殊字符。 取而代之的是,使用模块可以非常轻松地比较版本号:

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);
}
使用严格;
使用警告;
使用版本;
使用特征“说”;
说checkVersion('5.10.0','5.14.0');#返回-1
说checkVersion('5.10.0','5.10.0');#返回0
说checkVersion('5.14.0','5.10.0');#返回1
子检查版本{
我的$var1=班次;
我的$var2=班次;
返回版本->解析($var1)版本->解析($var2);
}

改用。当您处理版本时,此模块非常有用。

请改用。当您处理版本时,此模块非常有用。

这些只是var1和var2,这是有问题的打字错误,而不是在实际脚本中。这些只是var1和var2,这是有问题的打字错误,而不是在实际脚本中。是否存在逻辑错误?我觉得logicInput是4.0和3.0.2,我认为我没有检查主版本是否相同,次版本是否小于或大于,或者只是
return version->parse($var1)version->parse($var2)是否存在任何逻辑错误?我觉得logicInput是4.0和3.0.2,我认为我没有检查主版本是否相同,次版本是否小于或大于,或者只是
return version->parse($var1)version->parse($var2)