【问题标题】:Perl compare version numbers 5.1 < 5.10Perl 比较版本号 5.1 < 5.10
【发布时间】:2013-11-14 17:45:06
【问题描述】:

我在比较 2 个版本时遇到了困难。如果我们有 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"; }'

【问题讨论】:

  • 请不要使用回显和反引号来打印 Perl 单行。 Perl 可以自己打印。
  • 当然。我改变了它。但这并没有改变任何问题。

标签: perl version


【解决方案1】:

version 模块文档显示了如何执行此操作:

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

【讨论】:

  • 完美。非常感谢
  • 你不需要numify;您可以在返回的对象上使用&lt; 等。
  • @ikegami : 对了
【解决方案2】:

使用代码模块CPAN::Version

use CPAN::Version;
say CPAN::Version->vlt("5.1","5.10") ? "OK" : "KO";      

输出:

OK

【讨论】:

    【解决方案3】:

    我不确定我是否理解您想要实现的目标。 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;
    

    【讨论】:

      猜你喜欢
      • 2013-09-06
      • 2016-04-24
      • 2010-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-24
      • 2017-03-16
      相关资源
      最近更新 更多