[英]Compare 3 digit dot separated number with >3 digit and alphanumeric in Perl
任何人都可以帮助在 Perl 中执行以下操作吗?
在这里我需要始终与 2.4.0 进行比较。 谁能指导我如何在 Perl 中执行此操作?
我现有的代码如下:
use strict;
use warnings;
my $path_ice = $ARGV[0];
my $filename = ($#ARGV == 0) ? $ARGV[0]."\\medc17_tools.ini" : $ARGV[1];
my $flag = 0;
my $buld_ver = "";
my @buld_very = "";
my $status = 55;
if (open(my $fh, '<:encoding(UTF-8)', $filename))
{
while (my $line = <$fh>)
{
chomp $line;
if($line=~m/^PRJ_BUILD_NAME=mdgb/) {$flag = 1;}
if($line=~m/^PRJ_BUILD_VERSION=/)
{
@buld_very = split('=',$line);
$buld_ver = substr($buld_very[1], 0, 5);
$buld_ver =~ tr/.//d;
if ($buld_ver < 240 ) {$status = 44;}
last;
}
}
}
else {
warn "Could not open file '$filename' $!";
}
if ($flag == 1)
{
exit(1);
}
else
{
exit(0);
}
在这里,我们将点分隔转换为整数并进行比较。 它适用于 3 位数的值。 但不知道如何处理字母数字和 >3 位点分隔数字。
有什么帮助吗?
您列出的格式完全受version支持。
use version qw( );
my $build_ver = ...;
$build_ver = version->declare( $build_ver );
if ( $build_version >= version->declare("2.4.0") ) {
...
} else {
...
}
对于同时包含数字和非数字字符串的版本,一种工具是Sort::Versions
use Sort::Versions;
my @sorted versions =
sort { versioncmp($a, $b) }
qw( 2021.2.3.0 2.8.1 2021.3.1_alpha );
或者单独比较
if (versioncmp('2.4.0', '2021.2.3.0') == -1) { ... } # first is "lesser"
标准是
...这两个字符串被视为由句点或连字符分隔的子单元。 每个子单元可以包含任意数量的数字组或非数字组。 如果在两侧比较数字组,则使用数字比较,否则使用 ASCII 排序。 如果所有比较都相等,则具有更多单位的组或子组将获胜。 句点比连字符更紧密地将数字组绑定在一起。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.