Perl比较版本号5.1 < 5.10

3

我在比较两个版本时遇到了困难。如果我们有5.1和5.10,那么5.1应该小于5.10。我知道在十进制中它应该读作5.01和5.10。但是是否有一种方法可以使用5.1和5.10进行比较?

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

2
请不要使用echo和反引号来打印Perl的一行代码。Perl本身就可以很好地打印。 - TLP
当然。我已经改过了。但这并没有解决问题。 - Chris
3个回答

9

version 模块的文档展示了如何做到这一点:

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

完美。非常感谢。 - Chris
1
你不需要将其转换为数字; 你可以在返回的对象上使用 < 等符号。 - ikegami
@ikegami:没错,你说得对。 - Zaid

4
使用代码模块CPAN::Version:
use CPAN::Version;
say CPAN::Version->vlt("5.1","5.10") ? "OK" : "KO";      

输出:

OK

2

我不确定我理解你想要实现什么。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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接